在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