请在关闭之前阅读完整的问题:)
我正在寻找一个有mysqli的准备好的语句(重要的,不是PDO,因为我不能使用它,也不能将一些PDO代码传输到mysqli。),在那里我可以插入一个有很多值(大约2000)的长查询。但是查询必须准备好。
null
$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();
null
null
我的意思是
$allvalues = "";
foreach ($array as $value)
{
$allvalues .= "$value ";
}
$stmt->bind_param("$type", $allvalues);
但当然,我不能把它绑定。
我花了很长时间试图找到一个简单而优雅的解决方案来解决这个问题,并找到了一些完美的东西(在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运算符。当我尝试插入多个行时遇到了一个问题--因为它没有以正确的顺序给出值--所以只需要创建一个包含所有行的数组。
使用call_user_func_array
使用数组调用函数。
或者只是通过所有变量来执行,那么您甚至不需要使用bind_param
问题内容: 我目前在MySQL上使用这种类型的SQL在单个查询中插入多行值: 关于PDO的阅读,使用准备好的语句应该比静态查询为我提供更好的安全性。 因此,我想知道是否可以使用准备好的语句生成“通过使用一个查询插入多行值”。 如果是,请问我该如何实施? 问题答案: 使用PDO预准备语句插入多值 在一个execute语句中插入多个值。为什么这样,因为根据此页面,它比常规插入更快。 更多的数据值,或者
问题内容: 使用JDBC(Oracle),我需要在两个表的每一个中插入大约一千行。像这样: 问题在于两个表都是通过公共序列连接的,因此语句的顺序很重要。 如果我只有一张桌子,那会很容易。在这种情况下,我使用了代码: 但是,这种方法只能用一个准备好的语句,因此只能用一个插入。我该如何解决这个问题? 问题答案: 你可以试试 然后
我想知道是否可以使用一个准备好的语句插入多行。下面是我通常如何在DB中插入一行的示例: 我要插入的值将来自一个数组,例如:$values[0]['val1'];$values[0]["val2“];$values[0]['val3'];$values[1]['val1'];$values[2]['val2']; 等等。 这段代码可能需要一次插入几百行,我想过创建一个循环来创建数百个参数,然后为每一
下面是准备好的语句代码的片段: 它完成工作,但只有在数百次插入之后。是否有方法将列表或数组绑定到bind_param()参数,只需运行$stmtability->execute one time或其他可以提高性能的方法。 抱歉,如果这是问和回答之前。我四处看了一会儿,发现了一些类似的问题,但没有什么能明确地回答我的要求。
问题内容: 我正在将PHP PDO与PostgreSQL一起用于新项目。 给定以下功能,如何返回刚刚插入的行的ID?它不像现在那样工作。 问题答案: 从手册: 根据基础驱动程序,返回最后插入的行的ID或序列对象的最后一个值。例如,PDO_PGSQL()要求您为name参数指定序列对象的名称。 应该是这样的: [编辑]更新文档链接