如何将PHP HTTP_USER_AGENT保存到MySQL字段

问题描述:

我有一个简单的反馈形式PHP脚本,我想通过将$ _SERVER [HTTP_USER_AGENT]数据添加到我保存的数据库中的行来进行增强。如何将PHP HTTP_USER_AGENT保存到MySQL字段

当我尝试一个简单的插入,传递'$ _SERVER [HTTP_USER_AGENT]'作为一个典型的字符串时,我不断收到解析错误。我应该以某种方式捆绑它,以便该Server变量中使用的字符不会触发此类错误?

(插入查询罚款运行没有那场,顺便说一句。)

感谢。

+0

没有错误的代码和确切的错误信息,你的问题是没有意义的。请学习在未来的问题中提供这样的信息 – 2010-07-05 06:38:14

我敢打赌,导致解析器错误的用户代理字符串中有一个'

返回给PHP的用户代理字符串受本地浏览器的控制,这意味着您需要将其与普通用户输入进行无差别处理。恶意用户或被病毒/特洛伊/蠕虫感染的用户可能会更改用户代理字符串以导致SQL注入攻击。至少,你需要逃避它(例如mysql_real_escape_string())。我敢打赌,一旦你这样做了,你的解析器错误也应该消失。更好的是,如果你的系统允许,尝试使用prepared statements

+0

感谢您解释解决方案及其推理。 – Yaaqov 2010-07-05 06:42:38

+0

@Andrew完美的通知他有关安全错误。 谢谢您分享您的知识 – 2013-07-04 13:55:29

是否

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

没有它,很难说你遇到什么特别的问题实际的错误消息。
但是要解决所有可能的问题,

所有的
  • 首先,你必须阅读官方手册让自己理解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); 

运行你的查询,这样你永远不会有任何问题。或至少全面的错误信息。