PHP PDO 获取行为

PHP PDO fetch behaviour

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

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

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

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

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