繁体   English   中英

准备多个Insert mysqli

[英]Prepared multiple Insert mysqli

请在关闭前阅读完整的问题:)
我正在用mysqli寻找一个准备好的语句(重要,不是PDO,因为我不能使用它,并且不能将某些PDO代码传输到mysqli。),在这里我可以在长查询中插入很多值(大约2000) 。 但是查询必须准备。


所以我开始这样:

 $array = array("a1", "a2", "a3","a5", "a7", "a5","a9", "a32", "a3", "a4"); // AND SO ON UP TO 2000 $type = "s"; $end = count($array); $query = "INSERT INTO table (value) VALUES (?)"; for ($i = 0; $i <= $end - 1; $i++) { $query .= ", (?)"; $type .= "s"; } $stmt = $conn->prepare($query); $stmt->bind_param("$type", /* PROBLEM */); // HERE IS THE PROBLEM!!! $stmt->execute(); $stmt->close(); 


但是现在我的问题是,如何动态地绑定“ bind_param”中的变量?
请不要显示“执行”上的for循环之类的信息,因为这对于2000次插入来说太慢了:)。

我的意思是

 $allvalues = ""; foreach ($array as $value) { $allvalues .= "$value "; } $stmt->bind_param("$type", $allvalues); 

但是,当然,我不能约束它。

使用call_user_func_array通过数组调用该函数。

或者只是通过传递所有变量来执行,那么您甚至不需要使用bind_param

我花了很长时间试图找到一个简单而优雅的解决方案来解决这个问题,并找到了一些完美的方法(在php5.6及以上版本中有效)。

$array = array("a1", "a2", "a3", "a4", "a5", "a6"); 

$type = str_repeat("s", 6);

$query = "INSERT INTO table (value) VALUES (?)" . str_repeat(", (?)", 6);

$stmt = $conn->prepare($query); 
$stmt->bind_param($type, ...$array);
$stmt->execute();
$stmt->close();

... $ array称为splat运算符 我尝试插入多行时遇到了一个问题-因为它没有以正确的顺序给出值-因此只需要创建一个包含所有行的单个数组即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM