我有这段代码用于执行准备好的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与非活动列的值混淆?
答案 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')