【发布时间】:2016-04-10 14:22:35
【问题描述】:
这是我的查询:
$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 注入的最好和最简单的方法是什么?
【问题讨论】:
-
使用准备好的/参数化查询laravel.com/docs/5.2/database#running-queries
-
你能给我举个例子,说明我将如何处理上述查询吗?如果这很重要,我也在使用 Laravel 4.2。
-
应该很容易解释,你可以在这里找到 DB::insert for 4.2 laravel.com/docs/4.2/database#running-queries 唯一需要做的改变是将
array(1, 'Dayle')更改为一个变量,将它初始化为一个数组在查询之前并将要添加的值推送到其中(以正确的顺序)。 -
我已经看过了。不过,我不清楚如何以这种方式编写大型准备好的查询。
-
只要把它和你现在的完全一样,除了你将查询字符串中的所有变量都更改为占位符
?,而是将变量推送到一个数组中,然后再发送到@ 987654331@方法。