[英]Escaping string for MySQL statement
我有以下選擇語句:
$res = mysql_query("select * from Table where Name='{$_REQUEST['name']}'");
但是,由於這種查詢易於進行SQL注入,因此我在選擇時使用了更為安全的方式:
$escaped_name=mysql_real_escape_string($_REQUEST['name']);
$res = mysql_query("select * from Table where Name='{$escaped_name}'");
一切正常,直到我嘗試使用包含字符串Joel's
$_REQUEST['name']
運行選擇為止。在這種情況下,選擇不起作用。 在調試並將$escaped_name
的內容打印到屏幕后,我得到以下信息:
Joel\\\'s
這是什么原因呢? 似乎該字符串已自動轉義,然后又重新轉義了。
數據可能已被PHP(已棄用)的“ 魔術引號 ”功能自動轉義。 禁用.htaccess中的魔術引號:
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off
您在PHP中遇到了一個由稱為“魔術引號”的“功能”引起的問題。 當啟用魔術引號時,PHP嘗試轉義字符串,但是由於不同的數據庫具有不同的轉義方案,因此結果可能非常無用,甚至很危險。
有兩種可能的解決方案。 最簡單且推薦的解決方案是僅在php.ini或.htaccess中關閉魔術引號。
第二種方法是使用magic_quotes_gpc測試該功能是否已啟用,然后在輸入上運行反斜杠(如果已啟用)。 然后在結果上運行mysql_real_escape_string。
不知道您所說的“運行選擇”是什么意思,但是從您所說的內容中我猜得出您已經打開了魔引號。
如果您無權訪問php.ini,請檢查phpinfo()
或將其添加到文件中:
if(get_magic_quotes_gpc()){
echo "on";
}else{
echo "off";
}
如果將它們打開,則可以在各種位置(例如php.ini或.htaccess文件)將其禁用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.