【发布时间】:2019-04-12 17:28:15
【问题描述】:
为了避免不必要的信息,我的代码大致流程如下:
$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);
好的,我运行了这个,令我惊讶的是,当我获取下一个结果时,我得到了错误。在中间准备另一个语句 ($stt2) 是否会中断我已经创建的 $stt1?
我在这张桌子上有 15 条以上的记录。
更新:似乎语句对象的执行方法是我第二次获取返回 false 的原因。为此,在第二次获取之前再次调用 $stt1->execute() 可以解决此问题...但这表明所有语句对象之间通过 execute 方法存在某种联系?
【问题讨论】:
-
我找不到这方面的文档参考,但您似乎不能以这种方式重用准备好的语句。
-
@TimBiegeleisen 到底是什么让我感到困惑。即使我将第一条语句和第二条语句存储在两个不同的变量上,这也意味着内存中的不同位置....
-
我认为如果您没有实际使用第一个语句,它可能会起作用。
-
这可能取决于您使用的是缓冲查询还是非缓冲查询。见php.net/manual/en/mysqlinfo.concepts.buffering.php
-
而不是 fetch 使用 fetchAll 那么你就不需要继续从第一个获取结果