PHP PDO获取行为


PHP PDO fetch behaviour

假设表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);
}

在获取第一行后,如果有其他会话正在更新表,例如,更新第三行oo为1)并设置foo=0,那么上面的脚本还会获取第三行吗?我想知道fetch函数在代码后面做什么。

通常,当您执行一个查询时,它会运行到完成,然后将结果发送到您的数据库驱动程序,在本例中为PDO,以供使用。

即使使用游标或流式行集等按顺序获取数据的技术,效果也是一样的。您的查询结果不会受到后续语句的影响。

将您从PDO检索到的所有内容都视为在某个特定时间点拍摄的快照。