gpt4 book ai didi

php - 准备和执行

转载 作者:可可西里 更新时间:2023-11-01 07:45:14 26 4
gpt4 key购买 nike

通常在使用 PDO 时我想准备一个语句然后只执行一次。我这样做是为了确保我的所有参数都已正确转义。

据我了解,通过准备一条语句然后执行它,您将向 MySQL 服务器发送 2 个请求,因此这实际上比手动转义参数并通过 PDO::query 发送一个请求要慢.

有没有办法将参数化查询加上参数值一口气发送出去?


我写了一个小测试,

$t = new WxTimer();
for($i=0; $i<1000; ++$i) {
$db->prepare("SELECT user_id, $i FROM wx_user WHERE user_id=?")->execute($i)->fetch();
}
echo $t->elapsed().PHP_EOL;

并在打开和关闭 ATTR_EMULATE_PREPARES 的情况下运行它。当 ATTR_EMULATE_PREPARES 设置为 true(这似乎是默认设置)时,它的运行速度大约是原来的两倍(295 毫秒对 639 毫秒)。

奇怪的是,这个声明,

$db->query("SELECT user_id, $i FROM wx_user WHERE user_id=".$db->quote($i))->fetch();

尽管似乎没有使用准备好的语句,但在启用仿真的情况下运行大约 633 毫秒,或在关闭仿真的情况下运行 301 毫秒。

(如果您想了解语法,我覆盖了 PDO 类中的一些方法)

最佳答案

这取决于 PDO::ATTR_EMULATE_PREPARES的设置,

如果您使用准备语句的模拟,那么 pdo 将为您模拟准备语句,转义过程将在 pdo 中完成。所以这只会向数据库发送一个请求。

关于php - 准备和执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com