あるサーバーの設定で、私は非常に奇妙なエラーが発生します。 MySQL用PDOドライバ付きPHP 5.3.6、クライアントライブラリバージョン5.1.61があります。すべてが手でまとめられています。PDO bindValue with PDO :: PARAM_BOOL原因文の実行が自動的に失敗する
私はbindValueでパラメータをバインドし、\ PDO :: PARAM_BOOLとして3番目のパラメータを設定すると、statementはreturn falseとなり、何も起こりません(MySQLにデータが挿入されず、例外もありません)。 3番目のパラメータを使用しないとうまくいく。実際、私は三番目のパラメータをOMMITことができないパラメータを変換しながら、bacues 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台のサーバーで試してみましたが、このバグはありませんでした。また、私は$stmt->bindValue(5, false, \PDO::PARAM_BOOL);
に(文字列として) '0'を渡す場合、それは良い作品です。
問題なく、このサーバー上でPHP 5.3.10で問題が解決されました(Red Hat 5.4) –