gpt4 book ai didi

php - 如何使用类似于pdo的mysqli一次插入多条记录

转载 作者:可可西里 更新时间:2023-11-01 08:47:04 24 4
gpt4 key购买 nike

我一直在使用 PDO 和以下函数一次以 1000 条为单位插入多条记录。现在我正在使用一个使用 mysqli 的系统,我想知道我是否可以稍微修改我的函数以与 mysqli 一起工作,但是我注意到 mysqli execute 不接受数组作为参数。以下函数与 PDO 一起工作得很好而且速度很快:

$sub_data = array_chunk($data, 1000);
for ($b = 0; $b < count($sub_data); $b++)
{
$insert_values = array();
for ($a = 0; $a < count($sub_data[$b]); $a++)
{
$insert_values = array_merge($insert_values, array_values($sub_data[$b][$a]));
$placeholder[] = '(' . implode(', ', array_fill(0, count($sub_data[$b][$a]), '?')) . ')';
}

$sql2 = "INSERT INTO $table_name (" . implode(",", array_keys($sub_data[$b][0])) . ") VALUES " . implode(',', $placeholder) . "";
$prepare = $db->prepare($sql2);
try
{
$prepare->execute($insert_values);
}
catch (mysqli_sql_exception $e)
{
echo "<pre>";
print_r($sub_data[$b]);
echo "</pre>";
echo $e->getMessage();
print_r($db->errorInfo());
}
unset($insert_values);
unset($placeholder);
}

谢谢!

最佳答案

您发现了人们对 mysqli 扩展的最大提示之一。 PDO 使用 token 绑定(bind)系统,您可以在其中传递一组参数和 key ,PDO 会将它们结合起来。 Mysqli 使用更加模糊的绑定(bind)系统,当您有不确定数量的元素要传递给数组时,这可能会导致问题。

一个主要问题是 mysqli 想知道第一个参数是什么类型的数据。如果您不关心这种过滤级别,您可能只需将所有内容声明为字符串即可滑冰。如果这不起作用,请添加一些逻辑以在字符串和整数之间切换。为此,我们将在开始时向您的 $insert_values 添加另一个参数,以便我们可以将适当数量的字符串作为第一个参数传递

$insert_values = array(0 => '');
for ($a = 0; $a < count($sub_data[$b]); $a++)
{
$insert_values = array_merge($insert_values, array_values($sub_data[$b][$a]));
$placeholder[] = '(' . implode(', ', array_fill(0, count($sub_data[$b][$a]), '?')) . ')';
$insert_values[0] .= 's';
}

$insert_values[0] 现在应该看起来像 ssssss(s 的数量与数组中的元素相同)。我假设在不重构您的 array_merge 的情况下执行此操作,这可能会导致问题。该字符串必须位于第一个,因为它将成为 mysqli bind_param 调用的第一个参数。

然后我们可以使用 Reflection 类来进行绑定(bind)

$reflect = new ReflectionClass('mysqli_stmt');
$method = $reflect->getMethod('bind_param');
$method->invokeArgs($prepare, $insert_values);
$prepare->execute();

关于php - 如何使用类似于pdo的mysqli一次插入多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com