PHP:使用PDO对象和多个prepare语句会影响返回的statement对象



为了避免不必要的信息,我的代码大致如下:

$db = new PDO(DSN, DB_USER, DB_PW);

$sql1 = "SELECT * FROM Table1";
// fetching the first result
$stt1 = $db->prepare($sql1);
if ($stt1->execute()) {
$result = $stt1->fetch(PDO::FETCH_ASSOC);
}
// doing update in the middle by using the SAME $db object, but different statement variable
$sql2 = "UPDATE Table1 SET field1 = 'footest1' WHERE id = 1";
$stt2 = $db->prepare($sql2);
$stt2->execute();
// fetching the next result
$result = $stt1->fetch(PDO::FETCH_ASSOC);

好吧,我运行了这个,令我惊讶的是,当我获取下一个结果时,我得到了错误。在中间准备另一个语句($st2(是否会中断我已经创建的$st1?

我在那张桌子上有15张以上的唱片。

更新:语句对象的execute方法似乎是我的第二次获取返回false的原因。为了实现这一点,在第二次获取之前再次调用$stt1->execute((可以解决这个问题。。。但这表明在所有语句对象之间通过execute方法存在某种联系?

不同的数据库有不同的约束。这不是PHP或PDO的问题,而是数据库连接的问题。

虽然您可以依赖任何DB连接器来支持至少一个具有挂起行的游标,但许多数据库将限制您使用一个游标,并要求您在执行新语句之前完全获取或显式关闭底层游标。

这确实是数据库连接的一个属性,因为所有PDO语句都绑定到一个。(如果他们没有保持与数据库连接的绑定,他们将从哪里获取数据?(如果你使用的数据库一次只支持一个打开的准备语句,你将别无选择,只能序列化访问或打开到数据库的多个连接。您可能还想了解PDOStatement类的closeCursor方法。

最新更新