我想知道准备好的语句是否与具有多个VALUES的普通mysql_query相同.
INSERT INTO table (a,b) VALUES ('a','b'), ('c','d');
Run Code Online (Sandbox Code Playgroud)
VS
$sql = $db->prepare('INSERT INTO table (a,b) VALUES (?, ?);
Run Code Online (Sandbox Code Playgroud)
如果我在循环中使用预处理语句,那么MySQL是否在后台优化插入工作就像在第一段代码中那样工作,或者就像在循环中运行第一段代码一样,每次都有一个值?
joe*_*ert 11
我继续进行测试,其中一个查询使用预准备语句,另一个构建整个查询然后执行该测试.我可能没有做出我想要易于理解的内容.
这是我的测试代码.我认为准备好的语句有点被执行,直到调用$ 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();
?>
Run Code Online (Sandbox Code Playgroud)