PDO bindValue与\ PDO :: PARAM_BOOL导致语句执行无提示失败

Woj*_*pka 8 php mysql pdo prepared-statement doctrine-orm

在一个服务器设置中,我遇到了非常奇怪的错 有用于MySQL的PDO驱动程序的PHP 5.3.6,客户端库版本5.1.61.一切都是手工编制的.

当我使用bindValue绑定params并将第三个参数设置为\ 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()));
Run Code Online (Sandbox Code Playgroud)

结果:

array(4) {
  ["stmt result"]=>
  bool(false)
  ["last insert id"]=>
  string(1) "0"
  ["stmt err code"]=>
  string(5) "00000"
  ["pdo err code"]=>
  string(5) "00000"
}
Run Code Online (Sandbox Code Playgroud)

什么可能出错?我已经在其他4台服务器上试过了,但没有得到这个bug.此外,如果我传递'0'(作为一个字符串)$stmt->bindValue(5, false, \PDO::PARAM_BOOL);它是很好的.

gyu*_*eth 13

我在使用PHP 5.3.10的Ubuntu上遇到了同样的问题.(有趣的是,窗户上没有问题......)

实际上它是pdo中的一个已知错误:https://bugs.php.net/bug.php id = 38546

我使用PDO :: PARAM_INT而不是PDO :: PARAM_BOOL.它运作良好,您不必将布尔值转换为上面的字符串.