我正在试图弄清楚如何更新数据库行,但我想阻止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]);
如果有人在上面告诉我如何保护查询,我会非常感激。
答案 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]);