У меня возникла проблема с подготовленным оператором 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() - Затронутые строки не устанавливаются в ноль в команде fail после завершения ss заявление?
Я бегу PHP 5.3.6-13 и Postgresql 9.1
Просто включите исключения для PDO и получить лучший способ обработка таких случаев – zerkms
Это имеет смысл для меня, потому что вы повторно использовали одно и то же PDOStatement. Если для каждого утверждения требуется отдельный rowCount, подготовьте второй оператор. – Ozzy