Mar*_*nko 3 php sql postgresql laravel
我正在使用 Laravel 5.5 构建一个应用程序,并且必须为扩展 PostgreSQL 运行一些 SQL 查询,而 Eloquent ORM (PostGIS) 不支持这些查询。相反,我使用 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';
}
Run Code Online (Sandbox Code Playgroud)
我对这种方法有两个问题:
如何保护我的应用程序免受 SQL 注入攻击?
如何检查查询是否成功运行?DB::statement 似乎没有返回任何内容。
你可以在导入后制作这个
use Illuminate\Support\Facades\DB;
Run Code Online (Sandbox Code Playgroud)
你可以这样纠正你的查询
$quert=DB::insert('insert into tablename (columnname1,columnname2,) values (?,?)',[$id,$username]);
Run Code Online (Sandbox Code Playgroud)
如果你想将整个数据插入表中,但什么时候表中除了 id 和用户名之外没有数据
$quert=DB::insert('insert into tablename values (?,?)',[$id,$username]);
Run Code Online (Sandbox Code Playgroud)
问号是问号?:D 不要在这里输入任何内容,不客气
编辑:
关于如何保护我的应用程序免受 SQL 注入攻击?您可以使用跨站点脚本从中间件制作此内容,例如
{% raw %} {{}} {% endraw %}
Run Code Online (Sandbox Code Playgroud)
与 CSRF
<form ...>
{!! csrf_field() !!}
</form>
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,你有很多事情
1-简单的方法
如果您选择,您可以返回您的查询,如果插入/更新/删除,它将返回选择,否则它将返回 true
return response()->json([
'Message'=>'what ever you wanna write',
'Data' => $query,
], 200);
Run Code Online (Sandbox Code Playgroud)
2-困难的方式(我更喜欢:D)
您可以使用 DB::listen 进行调试
DB::listen(function ($query) {
// $query->sql
// $query->bindings
// $query->time
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47864 次 |
| 最近记录: |