PDO bindValue с \PDO::PARAM_BOOL приводит к сбою выполнения оператора без уведомления

В одной настройке сервера я получаю очень странную ошибку. Есть PHP 5.3.6 с драйвером PDO для MySQL, версия клиентской библиотеки 5.1.61. Все собирается вручную.

Когда я связываю params с 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);, все работает хорошо.

8
задан Wojciech Sznapka 20 April 2012 в 07:54
поделиться