PDO语句失败,错误" SQLSTATE [22007]:日期时间格式无效"

时间:2015-10-24 15:42:58

标签: php pdo

我有这段代码用于执行准备好的PDO语句:

$sql = 'INSERT INTO territories(territory_id,`name`,`inactive`,`createdAt`,`updatedAt`) VALUES(?,?,?,NOW(),NOW())';
$stmt = $pdoPdone->prepare($sql);
$params = [$territoryId, $territoryName, $inactive];

var_export($params);

$stmt->execute($params);

var_export($params)的输出如下所示:

array (
  0 => '04T80000000TQw1EAG',
  1 => 'SA_106SN03',
  2 => false,
)

但是当我尝试执行代码时出现了这个错误:

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column 'inactive' at row 1' in /var/sync/sync_bi/sync.php:260
Stack trace:
#0 /var/sync/sync_bi/sync.php(260): PDOStatement->execute(Array)
#1 {main}
  thrown in /var/sync/sync_bi/sync.php on line 260

第260行是$stmt->execute($params),那有什么不对?为什么PHP或PDO与非活动列的值混淆?

3 个答案:

答案 0 :(得分:1)

array (
  0 => '04T80000000TQw1EAG',
  1 => 'SA_106SN03',
  2 => false, // this should be an integer and not a boolean
)

使用0/1代替false/true

答案 1 :(得分:1)

inactive是布尔值而不是整数。 Mysql将布尔值存储为1或0的小int,因此请尝试将inactive设置为0。

答案 2 :(得分:0)

用DATE_FORMAT替换NOW()(NOW(),'%​​Y-%m-%d%H:%i:%s')