这是我的查询:
$last = count($list)-1;
$sql = 'INSERT INTO table (col1, col2, col3) VALUES ';
for($i=0; $i<$last; $i++) {
$sql .= '("'. $list[$i]['col1'] .'", "'. $list[$i]['col2'] .'", '. $list[$i]['col3'] .'), ';
}
$sql .= '("'. $list[$last]['col1'] .'", "'. $list[$last]['col2'] .'", '. $list[$last]['col3'] .') ';
$sql .= 'ON DUPLICATE KEY UPDATE ';
for($i=0; $i<$last; $i++) {
$sql .= 'col3 = '. $list[$i]['col3'] .', ';
}
$sql .= 'col3 = '. $list[$last]['col3'];
DB::statement($sql);
不用 PHP 查询:
INSERT INTO table (col1, col2, col3) VALUES
( $list[$i]['col1'] , $list[$i]['col2'] , $list[$i]['col3'] ),
...
( $list[$i]['col1'] , $list[$i]['col2'] , $list[$i]['col3'] )
ON DUPLICATE KEY UPDATE
col3 = $list[$i]['col3'],
...
col3 = $list[$i]['col3'];
我看过this和 this .我不太清楚我应该怎么做。我应该这样做吗?
DB::connection()->getPdo()->quote($sql);
我还读到您可以按照以下方式做一些事情:
DB::escape($sql)
使用 Laravel 防止上述查询的 SQL 注入(inject)的最好和最简单的方法是什么?
最佳答案
防止 SQL 注入(inject)的最好和最简单的方法是使用 parameterised queries .如何为批量插入做这件事已经回答了很多次,例如这里:Insert multiple rows with PDO prepared statements
编辑:
为了清楚起见,要在 Laravel 中执行参数化查询
DB::insert($query, $params);
在纯 PDO 中答案是什么
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);
如何为批量插入准备 $query
和 $params
的问题已经得到解答,大量讨论了利弊,以及一些边缘情况的替代解决方案场景出现了。请阅读它们并了解其工作原理。
关于php - 使用 Laravel 防止批量准备的原始查询的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634068/