我有一個簡單的反饋形式PHP腳本,我想通過將$ _SERVER [HTTP_USER_AGENT]數據添加到我保存的數據庫中的行來進行增強。如何將PHP HTTP_USER_AGENT保存到MySQL字段
當我嘗試一個簡單的插入,傳遞'$ _SERVER [HTTP_USER_AGENT]'作爲一個典型的字符串時,我不斷收到解析錯誤。我應該以某種方式捆綁它,以便該Server變量中使用的字符不會觸發此類錯誤?
(插入查詢罰款運行沒有那場,順便說一句。)
感謝。
我有一個簡單的反饋形式PHP腳本,我想通過將$ _SERVER [HTTP_USER_AGENT]數據添加到我保存的數據庫中的行來進行增強。如何將PHP HTTP_USER_AGENT保存到MySQL字段
當我嘗試一個簡單的插入,傳遞'$ _SERVER [HTTP_USER_AGENT]'作爲一個典型的字符串時,我不斷收到解析錯誤。我應該以某種方式捆綁它,以便該Server變量中使用的字符不會觸發此類錯誤?
(插入查詢罰款運行沒有那場,順便說一句。)
感謝。
我敢打賭,導致解析器錯誤的用戶代理字符串中有一個'
。
返回給PHP的用戶代理字符串受本地瀏覽器的控制,這意味着您需要將其與普通用戶輸入進行無差別處理。惡意用戶或被病毒/特洛伊/蠕蟲感染的用戶可能會更改用戶代理字符串以導致SQL注入攻擊。至少,你需要逃避它(例如mysql_real_escape_string())。我敢打賭,一旦你這樣做了,你的解析器錯誤也應該消失。更好的是,如果你的系統允許,嘗試使用prepared statements。
感謝您解釋解決方案及其推理。 – Yaaqov 2010-07-05 06:42:38
@Andrew完美的通知他有關安全錯誤。 謝謝您分享您的知識 – 2013-07-04 13:55:29
是否
mysql_query("
INSERT INTO
db_table
VALUES (
...
'" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "'
...
)");
不行?你能告訴我們你的整個查詢?什麼是確切的錯誤消息?
您是否總是以單一運算符的形式編寫整個代碼? – 2010-07-05 06:39:09
「單一運營商」是什麼意思?如果你的意思是,我沒有指定字段,只使用'VALUES'-操作符:答案是「否」 – 2010-07-05 06:53:22
沒有它,很難說你遇到什麼特別的問題實際的錯誤消息。
但是要解決所有可能的問題,
首先,你必須閱讀官方手冊讓自己理解PHP字符串語法:http://php.net/types.string
然後,你必須瞭解Mysql的正確的語法。我已經解釋了,它已經here
最後,你必須把一切融合在一起
這樣的:
$agent = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
$sql = "INSERT INTO `table` set useragent = '$agent'";
$res = mysql_query($sql) or trigger_error(mysql_query.$sql);
運行你的查詢,這樣你永遠不會有任何問題。或至少全面的錯誤信息。
沒有錯誤的代碼和確切的錯誤信息,你的問題是沒有意義的。請學習在未來的問題中提供這樣的信息 – 2010-07-05 06:38:14