在laravel中,我有一个用户可以输入的搜索框来搜索数据库。Laravel/PDO不能转义反斜杠或引号?
它在提交时执行以下代码(在此只显示重要部分)。
$searchBox = $request->get('searchBox');
...
$getSearch->where(function($query) use($searchBox) {
$query->orWhere('event', 'LIKE', '%'.$searchBox.'%');
$query->orWhere('sub_event', 'LIKE', '%'.$searchBox.'%');
});
的问题是,如果使用输入双引号(“)或反斜杠()查询失败。它似乎没有要逃避这些字符。
如果我这样做。
$searchBox = addslashes($searchBox);
然后它的伟大工程。
我不知道这是否是一个laravel或PDO的问题(或者不是一个问题,在所有)。我需要进行消毒的反斜杠所有的用户输入?我应该使用addsl骨灰?还是我不明白这应该如何工作。
当搜索条件包含反斜杠或双引号时,如何在mysql/PDO/laravel中执行LIKE搜索?
感谢
*编辑
我应该检查什么,我实际上得到的错误了。我现在已经做到了。
我认为这是一个奇怪的错误,因为它是当我运行查询时给我的网页重定向循环。但下面的@David Smith的评论让我重新检查了这一点。原来,这是导致循环的查询的一个零结果。
非常抱歉,我应该从一开始就更加清楚。查询实际上并不“失败”,我只是没有结果。
但我需要人们能够搜索评论/字段,可能(并且)有反斜杠和双引号。
事实上,修复循环似乎现在双引号工作。它的反斜杠导致了零结果。如果我搜索带有反斜杠的短语,则不会得到任何结果。
我不认为这是因为查询将反斜杠视为转义字符而不是反斜杠来搜索。
如果这是正确的,那么我该如何让我的用户搜索包含反斜杠的条款? addslashes仍然是要走的路?
Laravel不需要逃避数据,因为它使用的参数查询。我的猜测是数据库中的数据实际上包含斜线,而不应该使用斜线。 – patricus
你说“查询失败”。这到底是什么意思? MySQL返回错误,还是查询返回零结果? –
@DavidSmith你带来了一个好点,我编辑澄清。失败意味着这里的结果为零。 – Nertskull