-2

PDO を使用して mysql に日付型の値を挿入する際に問題が発生しています

コードスニペット :

 $HOST = 'localhost';
 $DATABASE = 'db';
 $USERNAME = 'XXXXXX';
 $PASSWORD = 'XXXXXX';

 $DBH = new PDO("mysql:host=$HOST;dbname=$DATABASE;charset=utf8",$USERNAME,$PASSWORD);
 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  

 $incomingdate  = date('Y-m-d', time());  // this echoes 2013-07-03
 $name = "XYZ";

 try {

  $stmt = $DBH->query('INSERT INTO tablename (date ,name ) VALUES (?, ?)');
  $stmt->execute(array($incomingdate, $name  ));
  $row_count = $stmt->rowCount();
  echo $row_count.' rows selected';

     }
 catch(PDOException $e ){
    echo 'Error in executing query ...';
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
    }

日付列の mysql データベース側のデータ型はDATEです。

エラー : 以下は PDOErrors.txt の内容です SQLSTATE[HY000]: 一般エラー: 2031

このクエリの何が問題なのですか....mysql_*関数を使用すると、以前のクエリはスムーズに実行されました...では、準備されたステートメントの何が問題なのですか??? また....データ型がタイムスタンプ型および/または mysqlの終わりの日時型である場合はどうすればよいですか

4

2 に答える 2

3

prepare()ではなく、準備されたステートメントに使用する必要がありますquery()

$stmt = $DBH->prepare('INSERT INTO tablename (date ,name ) VALUES (?, ?)');

PDO::query()バインドされたパラメーターを持つことはできません。can を介して作成されたステートメントのみPDO::prepare()です。

于 2013-07-03T09:34:39.267 に答える
1

date列名の前後にバッククォートを使用->prepareし、代わりに使用します->query

$stmt = $DBH->prepare('INSERT INTO tablename (`date` ,`name` ) VALUES (?, ?)');
于 2013-07-03T09:35:21.677 に答える