我目前正在我的Laravel 5应用程序中实现搜索功能。现在我有以下代码:
$terms = implode("* ", explode(" ", trim($query)." "));
$sql = "MATCH(title, content) AGAINST('".$terms."' IN BOOLEAN MODE)";
$results = Post::whereRaw($sql);
其中$query
是用户提供的字符串。该代码从用户获取(空格分隔)关键字,并对其进行全文搜索。问题是一个简单的'
可以破坏SQL查询并允许SQL注入。预防这种情况的最好方法是什么?
您可以对whereRaw
使用PDO绑定,它将负责转义传递的参数:
$terms = implode("* ", explode(" ", trim($query)." "));
$sql = "MATCH(title, content) AGAINST(? IN BOOLEAN MODE)";
$results = Post::whereRaw($sql, [$terms]);