2012-03-14 99 views
-4

我已經使用下面的代碼來檢查來自DB的姓氏(區分大小寫)我如何使用SQL中的單引號檢查名稱?

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'ravi' 

它的工作很好。但是,當名稱如下所示時,它不起作用,我使用php變量($ lname)來傳遞最後一個名稱。

SELECT * FROM $table_name WHERE BINARY LastName LIKE '$last_name' 
SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O'Connor' 

我該如何解決這個問題?

+0

你只需要轉義單引號。 – Lion 2012-03-14 11:19:41

+0

我有一個類似的問題。答案可能對你有用。 http://stackoverflow.com/q/8807690/212940 – vascowhite 2012-03-14 11:20:11

回答

0

當你正在構建你的PHP腳本的查詢,使用的價值,你的addslashes功能正在尋找:

$query = "SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE '" . addslashes($name) . "'" 

這將逃脫任何需要它的字符,並且將產生的結果你尋找。

另一種解決方案是在查詢,而不是單引號用雙引號:

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE "O'Connor" 

,但我想我更喜歡第一個解決方案

+0

我使用php變量($ lname)傳遞這個姓氏。 SELECT * FROM $ table_name WHERE BINARY LastName LIKE'$ last_name' – 2012-03-14 11:23:44

+1

@Ravichandran:您也可以在第一個地方傳遞變量時使用addslashes,即addslashes($ lname) – hellsgate 2012-03-14 11:31:50

2

你需要逃避所有的單引號用單引號:

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O''Connor' 
-1
SELECT * FROM sometable where LastName LIKE '%''%' 
0

,你可以自己編寫它使用正則表達式匹配的引號一個小程序,該程序可以驗證並解決用戶所犯的錯誤。

2

這應該工作。

SELECT * FROM BL12_anncurtis_existing_customers WHERE BINARY LastName LIKE 'O\'Connor' 

和課程的PHP,你有mysql_escape或全部PDO準備,將自動照顧這說明,給你使用LIKE值綁定到一個PHP變量。

+0

我傳遞這個姓氏使用PHP變量($ lname)。 SELECT * FROM $ table_name WHERE BINARY LastName LIKE'$ last_name' – 2012-03-14 11:24:26

+0

永遠不會那樣做!它的SQL注入天堂! PHP SQL字符串中使用的每個PHP變量至少應通過mysql_real_escape_string傳遞,或者如果使用PDO,則使用預準備語句。 – dweeves 2012-03-14 14:24:50

-1
WHERE BINARY LastName LIKE "O'Connor" 

這對我的作品

我認爲\'可能會更好,但兩者都可以工作

0

如果你有magic_quotes_gpc打開(你應該知道這是一個壞主意),你應該跳過你的字符串mysql_real_escape_string()

。這意味着從$ _GET,$ _POST和$ _COOKIES收集的字符串會被轉義(即「O'Connor」 - >「O \ Connor」)。

一旦你存儲了數據,然後再次檢索它,你從數據庫中取回的字符串將不會自動爲你自動轉義。你會回來的「奧康納」。所以,你需要通過它mysql_real_escape_string()

相關問題