PDO绑定值与插入

时间:2011-04-20 11:32:01

标签: mysql sql insert pdo crud

除了在PDO中使用绑定值时转义值的优点,当使用具有多个值的绑定值(准备语句一次,但是使用不同的值执行多次)而不是像单个插入语句那样,性能是否有任何差异 INSERT INTO table_name VALUES (value1, value2, value3),(value1, value2, value3),(value1, value2, value3)

2 个答案:

答案 0 :(得分:2)

我自己测试了100,000条记录。对于更简单的场景,我没有使用INSERT INTO而是使用REPLACE INTO来避免每次都出现新的密钥。

替换

在100,000行上的3列示例REPLACE INTO table_name VALUES (value1, value2, value3),(value1, value2, value3),(value1, value2, value3)......的原始替换为 14秒

正常结合

使用准备语句,绑定值并执行准备好的语句需要 33秒

foreach ($vars as $var) {
    $stmt->bindValue(':a' . $var["value1"], $var["value2"]);
    $stmt->bindValue(':b' . $var["value3"], $var["value4"]);
    $stmt->bindValue(':c' . $var["value5"], $var["value6"]);
    $stmt->execute();
}

BIND但是1 EXECUTE

在准备之前创建一个长语句,绑定所有参数并执行一次需要 22秒

REPLACE INTO clientSettings(clientId, settingName, settingValue) VALUES (:a1,:b1,:c1)
(:a2,:b2,:c2)
(:a3,:b3,:c3)
(:a4,:b4,:c4)
.......

请注意,这些是粗略的数字,用于创建100,000条记录的REPLACE INTO(删除和插入的字段)。

答案 1 :(得分:0)

如果你使用预准备语句,它会更快(对于MySQL)。这样,实际的SQL被解析一次并且数据被多次发送 - 因此每次要执行特定插入时都不会调用用于转换INSERT INTO ...的实际SQL层,它只被解析一次然后你只需发送要插入的不同参数(不同的数据)(或执行任何其他操作)。

因此,它不仅可以减少开销,还可以提高安全性(如果使用PDO :: bindValue / param,则由于正在使用的驱动程序/字符集进行适当的转义)。

简而言之 - 是的,您的插页会更快更安全。但是以什么边际 - 很难说。

相关问题