質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2502閲覧

mysql(pdo)のCURDATEで取得した本日の日付けをINSERTする方法

SugiuraY

総合スコア317

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/27 06:14

編集2016/08/27 06:15
$stmt = $pdo->prepare("INSERT INTO Atable (id,name,today_i) VALUES (:id,:name,SELECT CURDATE"); $stmt->bindValue(':id', $matches[1][$ii], PDO::PARAM_INT); $stmt->bindValue(':name', $conversion1, PDO::PARAM_INT); $stmt->execute();

MYSQLの3カラム目にCURDATEで持ってきた本日の日付けをInsetしたいと考えております。
もちろん、わざわさそのようにしなくてもPHPのdate()関数で取得した日付けをINSETで格納することができるのですが、MYSQL(PDO)で日付けを取得し、加えてそれをINSERTしようと思った場合にどのように記載するのかを検証し調べておりました。
無論、上記のコードはありえないとはわかっているのですが、MYSQLのCURDATEの説明を見ても全くわからなかったため、どなたかご教示を願いたく存じます。

よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

sql

1$stmt = $pdo->prepare("INSERT INTO Atable 2 (id,name,today_i) 3 VALUES (:id,:name,CURDATE()");

投稿2016/08/27 06:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SugiuraY

2016/08/27 06:59

いつもご回答を賜り誠にありがとうございます。 な、なんとそんな単純な書き方で良かったのですね。。。 重ねての質問で、申し訳ございませんが、違うベクトルでも勉強をしてみたいのですが、 php側で date_default_timezone_set('Asia/Tokyo'); $today=date('Y-m-d'); を取得して、CURDATEの代わりに$todayを代入してもMYSQL上、返り値が空のエラー( id、nameも含めて値が取り込まれない)になってしまいます。MYSQLのデータ型はもちろんdateです。いろいろdataフォーマットも試してみたのですが、うまく成功致しません。これの原因や解決法についてもしアドバイスを頂戴できれば非常に幸甚です。 よろしくお願い申し上げます。
SugiuraY

2016/08/27 07:00

すみません、dataフォーマットではなくdateフォーマットですね。 大変失礼いたします。
A.Ichi

2016/08/27 07:53

VALUES (:id,:name,:datei");してから、 $stmt->bindValue(':datei', $today, PDO::PARAM_STR);で行けませんでしょうか?
退会済みユーザー

退会済みユーザー

2016/08/27 08:26

> SugiuraY さん 具体的なコードを提示してください。 php の date を使おうと正しいコードを書いていれば、エラーにはなりません。むしろエラーになるコードがどうなっているかなんて、提示されなければ知りようがありません。
SugiuraY

2016/08/27 09:06

date_default_timezone_set('Asia/Tokyo'); $today=date('Y-m-d'); $stmt = $pdo->prepare("INSERT INTO Atable (id,name,today_i) VALUES (:id,:name,$today"); mysqlのデータ型はDATE(0000-00-00) になります。 大変、失礼致しました。
退会済みユーザー

退会済みユーザー

2016/08/27 09:13 編集

うまくいかないのは、プレースホルダをちゃんと使ってないからです。 SQLのエラーが出るから、気づきそうなものですけど… Exception 出していないのでしょうか。
A.Ichi

2016/08/27 09:17

VALUES (:id,:name,'$today'"); で行けると思いますが。,". $today ."'");でも
退会済みユーザー

退会済みユーザー

2016/08/27 09:23 編集

> A.Ichi さん SQLインジェクションの可能性があるからNGですよ。 提示されたコードでは発生しにくいですが、徹底してプレースホルダで記述すべき。
A.Ichi

2016/08/27 09:36

すみません、外部入力が無い項目なので良いと思ってました。修正必要ですかね?
退会済みユーザー

退会済みユーザー

2016/08/27 09:41

SQLインジェクションの可能性があるのか、起こりえないのか、その都度、確認する方が面倒ではありませんか? 100%インジェクションの可能性がないと言い切る自信があるなら、どうぞって思いますが、自分はいちいち特殊な例も考慮してこの場合は変数直書きでもOKって判断するくらいなら、初めからプレースホルダの記述を徹底しておく方が数十倍も楽だと思います。
A.Ichi

2016/08/27 09:46

おっしゃる通りですね、私は忘れて書いてしまう事がありますので、気おつけます。
SugiuraY

2016/08/27 09:48

ご回答有難うございます。 exceptionをだしていますが、エラーは表示されてないと思います。 また、A.ichiさんもありがとうございます。とくにdateはループでまわして、変数を入れるわけではないにもかかわらず、プレースホルダに入れるんですね。これもSQLインジェンクション対策としてとうことでしょうが。 とすると、最も初めにご教示頂きました、CURDATEも、直接いれずに、プレースホルダかして、値としてバインドしていれるべき?と理解致します。 不案内でまこと申し訳ございませんが、宜しくお願い申し上げます。
退会済みユーザー

退会済みユーザー

2016/08/27 09:52

> SugiuraY さん CURDATE はMySQL の関数なのでプレースホルダに入れちゃダメw > exceptionをだしていますが、エラーは表示されてないと思います。 PDOのexception は、コンストラクタで行うものですが、大丈夫ですかね… ↓ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
退会済みユーザー

退会済みユーザー

2016/08/27 10:05

> A.Ichi さん ソースコードを眺めているだけでは問題ないと思っても、register_globals が OFF になっているかとか、諸々の条件ありますからね… チームでやっている時とか、安易にコピペしてちょこちょこっとイジって…なんてメンバーがいたりすると厄介なので。
SugiuraY

2016/08/27 10:22

ご回答有難うございます。 な、なるほど。いま、改めてプレースホルダの記事を読んでたのですが、ちょっとわかりました。お恥ずかしながら、単なるphpの変数的なものという感覚でやっていました。。 exceptionも誤解しておりました。 帰ってすぐに 1.エラーがでるなら、どのうなものかを確認してみます。 また、A.ichiさんの方法は私が提示した、直接valueにphpの変数を渡すやり方で同じだと思いますが、shibuyaさんが仰るようにプレースホルダを使わないからうまく行かないということであるば、どのようなエラーなのか、みてみます 2.また、最後にご推奨のプレースホルダにいれてみてやってみます。
A.Ichi

2016/08/27 10:29

ご指摘有難うございます。後に残さない事は重要です。register_globalは、OFFがいいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問