2010-11-25 21 views
0

我有一個註冊系統,它要求用戶名。有些人的姓氏中有一個撇號,它阻止了將數據寫入MySQL數據庫表(例如O'Hare)。如何防止撇號被刪除PHP MySQL

我正在使用mysql_real_escape_string這是從字符串中刪除撇號。這將是很好,除了我需要使用帶有撇號的值對Web服務,否則Web服務將返回false。

我想在使用mysql_real_escape_string之前我可以使用Web服務進行名稱檢查,但是會出現安全漏洞嗎?或者SOAP Web服務已經對乾淨輸入做了他們自己的檢查?

或者有沒有更好的方式來傳遞PHP保留撇號的變量,但仍然保持安全,MySQL可以接受它?

+1

這是...... *刪除*它? *認真*? – 2010-11-25 10:22:02

回答

7

你應該向我們展示一些代碼,因爲mysql_real_escape_string不會刪除撇號,但只能逃脫它們。
轉義意味着O'Hare將變爲O\'Hare,以便它可以作爲字符串插入:'O\'Hare'。從數據庫中檢索後,您的價值應該仍然是原始的O'Hare

所以,如果撇號是「丟失」,那麼程序邏輯中可能存在其他地方的錯誤。

另一種選擇是從使用MySQL庫切換到用於訪問數據庫的MySQLi或PDO庫。後兩者支持準備好的陳述。準備好的語句通常被認爲是查詢數據庫的最佳實踐。

+0

爲什麼downvote? – Jacco 2010-11-25 11:09:54

0

mysql_real_escape_string()不會刪除撇號。

您的問題可能在輸出端,或其他一些與輸入相關的函數。

0

在使用mysql_real_escape_string之前,您需要打開數據庫連接,否則將出現故障。