У меня проблема с подготовленным оператором 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