php - Mysql PDO Prepared语句效率

标签 php mysql pdo prepared-statement

我正在接管一个 PHP 应用程序,该应用程序在每次运行 SQL 语句时都使用 MySQL PDO 准备好的语句。 我知道当您要对同一语句进行多次迭代时,准备 SQL 会更有效率。

$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();

但是,我正在接管的应用程序在 PDO 之上构建了一个调用通用“执行”函数的层,它似乎准备了每个 SQL 查询。例如:

$query = self::$DB->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$query->execute($bindvars);

如果应用执行成百上千条“INSERT INTO ...... ON DUPLICATE KEY UPDATE”SQL 语句,如果 $DB->prepare() 步骤每次都运行,它是否会产生大量开销?

非常感谢,杰森。

最佳答案

来自文档:

Calling PDO::prepare() and PDOStatement::execute() for statements that will be issued multiple times with different parameter values optimizes the performance of your application by allowing the driver to negotiate client and/or server side caching of the query plan and meta information...

我在这里并没有真正透露任何信息,但“优化性能”的反面确实是“开销”。至于显着与否,你何不跑个循环,测一测?然后,您可以用硬数据自己决定来支持您的决定。

关于php - Mysql PDO Prepared语句效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466891/

相关文章:

MySQL 表中的 PHP PDO 计数和总和值

PHP 数组在 foreach() 中获取下一个键/值

php - Cakephp 中的 UNION 语法

php - 使用 PHP DOMXpath 遍历子节点?

MySQL如何在插入行时忽略索引

php - 如何使用 PHP 管理动态创建表单中的数据

php - PDO 限制和偏移

php - 如何确保我的数据库连接安全?

php - 任何异常的自定义错误处理程序

php - 如何使用 PHP 函数获取 PostgreSQL 版本