我遇到了一个问题,涉及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