使用 MySQLi 准备好的语句插入多行
问题:
您想要高效地插入使用 MySQLi 准备好的语句将多行存入数据库。您当前的方法涉及为要插入的每一行构建一个单独的字符串,这是低效的。您寻求一种方法来执行单个准备好的语句,该语句在一次执行中插入多行。
解决方案:
虽然准备好的语句通常用于单行操作,有一种复杂的技术允许在一个语句中插入多行。在索引数组的示例索引数组 ([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 上进行测试,以下代码演示了该过程:
<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; // Sample indexed array of indexed arrays $rowCount = count($rows); $values = "(" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . ")"; $conn = new mysqli("localhost", "root", "", "myDB"); $stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES $values"); $stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows)); $stmt->execute();</code>
此方法构造单个准备好的语句(“INSERT INTO test (col1, col2, col3) VALUES (...)”)并填充扁平 $rows 数组中的占位符值。 str_repeat 函数用于定义绑定参数的适当数量的占位符字符。
替代方法:
如果插入多行需要执行循环,请考虑使用单行预准备语句方法:
<code class="php">foreach ($rows as $row) { $stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES (?,?,?)"); $stmt->bind_param('iii', $row[0], $row[1], $row[2]); $stmt->execute(); }</code>
其他资源:
以上是如何使用 MySQLi 准备语句高效插入多行?的详细内容。更多信息请关注PHP中文网其他相关文章!