PDO rowCount не возвращает правильное количество затронутых строк

У меня проблема с подготовленным оператором PDO и rowCount, возвращающим неправильное количество затронутых строк.

У меня есть простая тестовая база данных:

create table test (
   boolean var1;
);

Затем у меня есть следующий тестовый код:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");
$sth->execute(array(':val' => true));
echo $sth->rowCount();

Который возвращает, как ожидалось: 1 строка затронута

И когда я вставляю недопустимый тип и вставка не выполняется:

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");
$sth->execute(array(':val' => 20));
echo $sth->rowCount();

Что возвращает ожидаемый результат: затронуты 0 строк

Однако, когда у меня есть несколько вставок -

$sth = $pdo->prepare("INSERT into test (var1) VALUES (:val)");

$sth->execute(array(':val' => true));
echo $sth->rowCount() . ", ";

$sth->execute(array(':val' => 20));
echo $sth->rowCount();

Результатов: 1, 1

И если я изменяю порядок выполнения, я получаю: 0, 1

Почему rowCount () - Затронутые строки не обнуляются в операторе ошибки после оператора успеха?

Я использую php 5.3.6-13 и Postgresql 9.1

6
задан Chris Travers 25 March 2013 в 04:18
поделиться