在一个服务器设置中,我遇到了非常奇怪的错误。有用于 MySQL 的带有 PDO 驱动程序的 PHP 5.3.6,客户端库版本 5.1.61。一切都是手工编译的。
当我用 bindValue 绑定参数并将第三个参数设置为 \PDO::PARAM_BOOL 然后语句执行返回 false 并且没有任何反应(没有数据插入 MySQL,甚至根本没有异常)。当我不使用第三个参数时,它运行良好。事实上我不能省略第三个参数,因为 Doctrine2 DBAL 在转换参数时设置它......
这是代码:
<?php
$pdo = new \PDO('mysql:host=***;dbname=***', '***', '***'); // hidden DB access
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('insert into outage (name, description, start_at, end_at, is_exception, extranet_id) values (?,?,?,?,?,?)');
$stmt->bindValue(1, 'Test name', \PDO::PARAM_STR);
$stmt->bindValue(2, 'Test desc', \PDO::PARAM_STR);
$stmt->bindValue(3, '2012-01-01 00:00:00', \PDO::PARAM_STR);
$stmt->bindValue(4, null, \PDO::PARAM_NULL);
$stmt->bindValue(5, false, \PDO::PARAM_BOOL);
$stmt->bindValue(6, 2, \PDO::PARAM_INT);
var_dump(array('stmt result' => ($result = $stmt->execute()), 'last insert id' => $pdo->lastInsertId(), 'stmt err code' => $stmt->errorCode(), 'pdo err code' => $pdo->errorCode()));
结果:
array(4) {
["stmt result"]=>
bool(false)
["last insert id"]=>
string(1) "0"
["stmt err code"]=>
string(5) "00000"
["pdo err code"]=>
string(5) "00000"
}
什么可能出错?我已经在其他 4 台服务器上尝试过,但没有遇到此错误。此外,如果我将 '0' (作为字符串)传递给$stmt->bindValue(5, false, \PDO::PARAM_BOOL);
它,它的效果也很好。