【发布时间】:2014-12-14 21:05:25
【问题描述】:
假设我们要在一个表中插入多行:
$rows = [(1,2,3), (4,5,6), (7,8,9) ... ] //[ array of values ];
使用 PDO:
$sql = "insert into `table_name` (col1, col2, col3) values (?, ?, ?)" ;
现在,您应该如何插入行?像这样?
$stmt = $db->prepare($sql);
foreach($rows as $row){
$stmt->execute($row);
}
或者,像这样?
$sql = "insert into `table_name` (col1, col2, col3) values ";
$sql .= //not sure the best way to concatenate all the values, use implode?
$db->prepare($sql)->execute();
哪种方式更快更安全?插入多行的最佳方法是什么?
【问题讨论】:
-
批量插入总是更快。只需将值设置为 '(col1,col2,col3),(col1,col2,col3),...'
-
安全风险如何?你能像下面这样内爆行吗:值 (implode(', ', $rows[0]), (implode(', ', $rows[1]), .... $db->prepare 方法仍然存在吗?如果需要,正确引用这些值?
-
我不清楚您的安全问题是什么。如果您想以最方便的方式插入大量行,请分批进行。如果您担心数据是否被接受,那么要么先审查它,要么插入并处理任何异常。
-
我的意思是 sql 注入。如果您是来自用户的原始行数组,您可以将其内爆并将其发送到 db->prepare 并执行它吗?我的意思是 prepare 方法会正确地转义字段吗?
-
处理用户数据超出了您最初问题的范围。有许多可靠的“清理”输入和防止 sql 注入的方法。
标签: php mysql pdo sql-insert