我想知道准备好的语句是否与具有多个值的普通 mysql_query 一样工作。
INSERT INTO table (a,b) VALUES ('a','b'), ('c','d');
VS
$sql = $db->prepare('INSERT INTO table (a,b) VALUES (?, ?);
如果我在循环中使用准备好的语句,MySQL 是否会优化后台插入,使其像在第一段代码中那样工作,或者就像在循环中每次运行一个值的第一段代码一样?
我继续运行了一个测试,其中一个查询使用准备好的语句,另一个查询构建整个查询然后执行它。我可能没有让我想知道的事情变得容易理解。
这是我的测试代码。我在想准备好的语句会阻止执行,直到调用 $stmt->close() 来优化它或其他东西。但情况似乎并非如此,因为使用 real_escape_string 构建查询的测试至少快了 10 倍。
<?php
$db = new mysqli('localhost', 'user', 'pass', 'test');
$start = microtime(true);
$a = 'a';
$b = 'b';
$sql = $db->prepare('INSERT INTO multi (a,b) VALUES(?, ?)');
$sql->bind_param('ss', $a, $b);
for($i = 0; $i < 10000; $i++)
{
$a = chr($i % 1);
$b = chr($i % 2);
$sql->execute();
}
$sql->close();
echo microtime(true) - $start;
$db->close();
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)