PHP MySQLi多个插入

joe*_*ert 2 php mysqli

我想知道准备好的语句是否与具有多个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)

  • 我想要一个类似的东西(多个插入),因为这个答案被标记为正确,这是优化的解决方案吗?另外"因为使用real_escape_string构建查询的测试速度至少快10倍." 那个测试在哪里? (3认同)