我正在使用 Laravel 5.5 构建一个应用程序,我必须为 Eloquent ORM (PostGIS) 不支持的扩展 PostgreSQL 运行一些 SQL 查询。相反,我使用 DB::statement(\(queryString);将数据插入数据库。 \)queryString 由与预构建的 SQL 语句连接的输入变量构建而成。
这是来自我的控制器的代码(请注意,实际查询更复杂,这只是一个示例):
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$id= $request->input('id');
$name= $request->input('name');
$geom = $request->input('geom');
$geom = DB::raw("ST_TRANSFORM(ST_GeomFromGeoJSON('".$geom."'), 3857)");
$statement = "INSERT INTO tableName(id, name) VALUES ('".$id."', '".$name."', ".$geom.");";
DB::statement($statement);
return 'Insert Successful';
}
我对这种方法有两个问题:
如何保护我的应用程序免受 SQL 注入攻击?
如何检查查询是否成功运行? DB::statement 似乎没有返回任何东西。
原文由 Marin Leontenko 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以在导入后做这个
你可以像这样纠正你的查询
并且如果您想将整个数据插入到表中,但是何时表中除了 id 和用户名之外没有数据
问号是问号吗? :D 不要在这里输入任何内容,欢迎您
编辑:
关于如何保护我的应用程序免受 SQL 注入攻击?你可以从中间件制作这个,使用跨站点脚本,比如
与 CSRF
对于第二个问题,你有很多事情
1-简单的方法
如果您选择它,您可以返回您的查询,如果它插入/更新/删除,它将返回选择,如果不是,它将是 false
2-艰难的方式(我更喜欢:D)
您可以使用 DB::listen 进行调试