【发布时间】:2015-03-17 18:37:03
【问题描述】:
假设表 table 包含许多记录,我查询带有一些条件的 select 语句,在本例中为 foo=1。获取一条记录后,我会用这条记录来做一些耗费时间的事情,并且我使用sleep(2) 使其易于理解。
$stmt = $dbh->query('SELECT * FROM table WHERE foo=1');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
//do sth
sleep(2);
}
获取第一行后,如果还有其他会话更新表,例如更新第三行(假设原来的foo第三行的 strong> 为 1) 并设置 foo=0,上面的脚本是否仍会检索 第三行?我想知道 fetch 函数在代码后面做了什么。
【问题讨论】:
-
否,因为查询是在 while 之上执行的,而不是在 while 本身之上。循环只是遍历从查询接收到的结果集!