Laravel准备了UPDATE Query语句

时间:2015-09-18 23:07:20

标签: php mysql laravel

我正在试图弄清楚如何更新数据库行,但我想阻止sql注入

$postdata = $request->except('token');
$src = json_decode($postdata['data']);

$locationData = addslashes ( $src->locationData );
$userData = addslashes ( $src->userData );
if ( isset($src->routeData) ){
    $routeData = addslashes ( $src->routeData );
} else {
    $routeData = null;
}
$url = addslashes ( $src->url );

DB::statement("UPDATE maps SET locationData = '$locationData', userData = '$userData', routeData = '$routeData' WHERE url = ?", [$url]);

如果有人在上面告诉我如何保护查询,我会非常感激。

2 个答案:

答案 0 :(得分:2)

最安全的方法是使用型号:

模型/ Map.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Map extends Model {
    protected $table = 'maps'
}

并在您的代码中:

$url = 'blabla';
$locationData = 'dadada';
$userData = 'nomnomnom';

Map::where('url', '=', $url)->update(compact('locationData', 'userData'));

答案 1 :(得分:2)

或者,如果您不想使用模型,那么您可以简单地使用DB::statement(),因为它默认使用预准备语句。

因此,您无需addslashes

$postdata = $request->except('token');
$src = json_decode($postdata['data']);

$locationData = $src->locationData;
$userData = $src->userData;
if ( isset($src->routeData) ){
    $routeData = $src->routeData;
} else {
    $routeData = null;
}
$url = $src->url;

DB::statement("UPDATE maps SET locationData=?, userData=?, routeData=? WHERE url=?",
 [$locationData, $userData, $routeData, $url]);