php - 使用 Laravel 防止批量准备的原始查询的 SQL 注入(inject)

标签 php mysql laravel pdo

这是我的查询:

$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'];

我看过thisthis .我不太清楚我应该怎么做。我应该这样做吗?

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/

相关文章:

javascript - append 函数将以前的数据附加到新数据

javascript - 使用d3 js的水平条形图

php - "No Element Found"试图使 AJAX 发送/接收字符串到 PHP

php - 如何从 PHP 向 MySQL 输入特殊字符?

PHP 。 Mysql - 方法不更新 mysql 行

php - 在 PHP 中从 MySQL 数组格式化 JSON 以用于 JQPlot

sql - 以简单的数据库架构 : Good and Bad points? 为例

php - WhereHas()/orWhereHas 未按预期约束查询

laravel - 如何在 Laravel 5 中重置密码?

jquery - 如何更改字体很棒的图标和按钮类 onclick?