准备多个插入的mysqli(Prepared multiple Insert mysqli)

2019-10-17 18:16发布

关闭之前,请先阅读完整的问题:)
进出口寻找与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” dynamicaly的变量?
请不要告诉我像for循环中的“执行”任何事情,因为这是2000和刀片太sloww :)。

我的意思是这样

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

但当然,我不能说绑定。

Answer 1:

使用call_user_func_array使用数组来调用函数。

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



Answer 2:

我刚刚花了年龄试图找到一个简单而优雅的解决方案正是这一问题,并找到了完美的(工作在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();

该... $阵列东西被称为图示操作 。 我有当我试图插入到多行的问题 - 因为它没有给出正确的顺序值 - 所以刚刚创建一个单一的阵列,其中包括所有的行。



文章来源: Prepared multiple Insert mysqli
标签: php mysql mysqli