[英]How to prevent apostrophe from being removed PHP MySQL
我有一個注冊系統,要求用戶名。 有些人的姓氏中帶有撇號,這會阻止將數據寫入MySQL數據庫表(例如O'Hare)。
我正在使用mysql_real_escape_string從字符串中刪除撇號。 除非我需要對Web Service使用帶撇號的值,否則就可以了,否則Web Service將返回false。
我以為我可以在使用mysql_real_escape_string之前先通過Web服務進行名稱檢查,但這會帶來安全缺陷嗎? 還是SOAP Web服務已經進行了自己的干凈輸入檢查?
還是有更好的方法來傳遞變量,從而使PHP保留撇號但仍保持其安全性,而MySQL可以接受它呢?
您應該向我們展示一些代碼,因為mysql_real_escape_string
不會刪除撇號,而只會對其進行轉義。
轉義表示O'Hare
將變為O\\'Hare
以便可以將其作為字符串插入: 'O\\'Hare'
。 從數據庫檢索后,您的值仍應為原始的O'Hare
。
因此,如果撇號“丟失”,則程序邏輯中的其他地方可能會出現錯誤。
另一個選擇是從使用MySQL庫切換到使用MySQLi或PDO庫訪問數據庫。 后兩個支持准備好的聲明。 通常,將准備好的語句視為查詢數據庫的最佳實踐。
mysql_real_escape_string()
不會刪除撇號。
您的問題很可能在輸出端,或某些其他功能與輸入混亂。
在使用mysql_real_escape_string
之前,您需要打開數據庫連接,否則它將發生故障。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.