使用 PDO 准备好的语句高效插入多行
PDO 允许插入多行,而不是使用单独的参数执行多个插入语句使用单个查询。这种方法通过避免多次准备和执行语句的需要来增强性能和安全性。
例如,将数组 $values 中的值插入到表 table 中:
$params = []; foreach ($values as $value) { array_push($params, $value['val1'], $value['val2'], $value['val3']); } $row_length = count($values[0]); $nb_rows = count($values); $length = $nb_rows * $row_length; $args = implode(',', array_map(function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length))); $query = "INSERT INTO table VALUES " . $args; $stmt = DB::getInstance()->prepare($query); $stmt->execute($params);
在此解决方案中, ?占位符是根据行数和列数动态生成的。然后将参数附加到数组并作为单个数组传递给执行方法。这保证了每个参数都是单独处理的,从而确保数据安全。
或者,如果有太多行无法使用单个查询有效插入,请考虑单独执行它们:
$args = array_fill(0, count($values[0]), '?'); $query = "INSERT INTO table VALUES (".implode(',', $args).")"; $stmt = $pdo->prepare($query); foreach ($values as $row) { $stmt->execute($row); }
这该方法在容纳大型数据集的同时保持了使用准备好的语句的安全优势。
以上是如何使用 PDO 准备语句有效地将多行插入数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!