如何使用预准备语句一次在mysql数据库中插入多行?

php*_*ini 8 php mysql prepared-statement

我试图在这个问题中使用staticsan的答案来准备陈述.让我们举个例子:

$stmt = $mysqli->prepare("INSERT INTO something (userid, time, title) VALUES (?, ?, ?)");
$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

在staticsan的回答中,将数组添加到mysql语句中,这样我们最终只需一个语句就可以将多个数据插入到数据库中.在我的例子中如何做到这一点?

小智 6

这完全有效:

$stmt = $mysqli->prepare("INSERT INTO something (userid, time, title) VALUES (?, ?, ?)");

$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();

$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();

$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();

$stmt->bind_param('iis', $userid, time(), $title);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

您可以遍历每个值的数组,以便每次插入和绑定并执行.它不会像您链接的示例中的批量插入一样快,但它会更安全.

  • 谢谢,那行得通。但是execute() 将针对每个数组元素执行,因此每一行将单独插入到数据库中,而不是同时插入。我对吗?我希望看到一个解决方案,您首先 bind_param 绑定所有值,最后执行一次。 (3认同)
  • 不过,这仍然比旧的静态“插入”查询慢很多,不是吗?我的意思是,在循环中执行查询会在每个查询之间产生约 2 毫秒的延迟。对于大阵列,这将花费很长时间,不是吗? (3认同)