2010-07-05 60 views
5

我有一個簡單的反饋形式PHP腳本,我想通過將$ _SERVER [HTTP_USER_AGENT]數據添加到我保存的數據庫中的行來進行增強。如何將PHP HTTP_USER_AGENT保存到MySQL字段

當我嘗試一個簡單的插入,傳遞'$ _SERVER [HTTP_USER_AGENT]'作爲一個典型的字符串時,我不斷收到解析錯誤。我應該以某種方式捆綁它,以便該Server變量中使用的字符不會觸發此類錯誤?

(插入查詢罰款運行沒有那場,順便說一句。)

感謝。

+0

沒有錯誤的代碼和確切的錯誤信息,你的問題是沒有意義的。請學習在未來的問題中提供這樣的信息 – 2010-07-05 06:38:14

回答

6

我敢打賭,導致解析器錯誤的用戶代理字符串中有一個'

返回給PHP的用戶代理字符串受本地瀏覽器的控制,這意味着您需要將其與普通用戶輸入進行無差別處理。惡意用戶或被病毒/特洛伊/蠕蟲感染的用戶可能會更改用戶代理字符串以導致SQL注入攻擊。至少,你需要逃避它(例如mysql_real_escape_string())。我敢打賭,一旦你這樣做了,你的解析器錯誤也應該消失。更好的是,如果你的系統允許,嘗試使用prepared statements

+0

感謝您解釋解決方案及其推理。 – Yaaqov 2010-07-05 06:42:38

+0

@Andrew完美的通知他有關安全錯誤。 謝謝您分享您的知識 – 2013-07-04 13:55:29

2

是否

mysql_query(" 
INSERT INTO 
    db_table 
VALUES (
    ... 
    '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']) . "' 
    ... 
)"); 

不行?你能告訴我們你的整個查詢?什麼是確切的錯誤消息?

+0

您是否總是以單一運算符的形式編寫整個代碼? – 2010-07-05 06:39:09

+0

「單一運營商」是什麼意思?如果你的意思是,我沒有指定字段,只使用'VALUES'-操作符:答案是「否」 – 2010-07-05 06:53:22

0

沒有它,很難說你遇到什麼特別的問題實際的錯誤消息。
但是要解決所有可能的問題,

所有的
  • 首先,你必須閱讀官方手冊讓自己理解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); 

運行你的查詢,這樣你永遠不會有任何問題。或至少全面的錯誤信息。

相關問題