微信 pdo query php,PHP PDO :: query实际上如何做?

关于PDO :: query的作用有点困惑.完全理解它与准备和执行之间的区别,但是不清楚查询是否运行获取.根据PHP.net:

PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object

经证实:

$s = $pdo->query('SELECT * FROM user');

var_dump($s);

哪个输出:

object(PDOStatement)#2 (1) {

["queryString"]=> string(18) "SELECT * FROM user"

}

所以它清楚地给我们一个PDOStatement对象准备运行fetch或fetchAll.然而.从PHP.net手册中获取以下代码:

$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';

foreach ($conn->query($sql) as $row) {

print $row['name'] . "\t";

print $row['color'] . "\t";

print $row['calories'] . "\n";

}

这表明运行PDO :: query实际上在内部运行fetch并返回结果(在方法的初始描述中提到).但是,如果这是真的,那么后续对fetch的调用应该返回第二行,但是它不会返回,但是仍然会得到第一行.

查询是否运行获取并重置指针,以便后续获取还返回第一行?如果是这样,这不是没有意义吗?为什么你可以循环查询并获得多行?它使用产量运行某种协同程序吗?另外,为什么你不能在PDOStatement对象中看到获取的数据?据推测,他们使用__set_state和__debugInfo魔术方法隐藏了这些数据

解决方法:

这与PHP PDO :: query实际执行的操作无关.而是PDOStatement实际上是什么.它是an object that supports a Traversable interface,所以它可以迭代.并且当迭代时,它在内部调用fetch().

it is unclear about if query runs a fetch

PDO :: query永远不会运行获取. PDOStatement确实如此.在以下行中,简短语法用于简洁.

foreach ($conn->query($sql) as $row)

虽然它可以写成

$stmt = $conn->query($sql);

foreach ($stmt as $row)

因为foreach迭代结果,由查询返回,而不是一次又一次地运行查询

why can you not see the fetched data in the PDOStatement object?

因为没有这样的数据.

希望现在一切都清楚了

标签:php,pdo

来源: https://codeday.me/bug/20190623/1266730.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值