-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()不能有绑定参数,只有通过PDO::prepare()can 创建的语句。

于 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 回答