【问题标题】:How to save PHP HTTP_USER_AGENT to MySQL field如何将 PHP HTTP_USER_AGENT 保存到 MySQL 字段
【发布时间】:2011-03-11 18:55:34
【问题描述】:

我有一个简单的反馈表单 PHP 脚本,我想通过将 $_SERVER[HTTP_USER_AGENT] 数据添加到我正在保存的数据库中的行来增强它。

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

(顺便说一句,INSERT 查询在没有该字段的情况下运行良好。)

谢谢。

【问题讨论】:

  • 如果没有错误代码和确切的错误消息,您的问题就毫无意义。请学习在以后的问题中提供此类信息

标签: php mysql environment-variables


【解决方案1】:

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

返回给 PHP 的 User-Agent 字符串受本地浏览器的控制,这意味着您需要将其与常规用户输入区别对待。恶意用户或被病毒/木马/蠕虫感染的用户可能会更改用户代理字符串以引发 SQL 注入攻击。至少,您需要转义它(例如使用mysql_real_escape_string()。我敢打赌,一旦您这样做了,您的解析器错误也应该消失。更好的是,如果您的系统允许,请尝试使用prepared statements这个。

【讨论】:

  • 感谢您解释解决方案及其推理。
  • @Andrew Perfect 通知他安全错误。感谢您分享您的知识
【解决方案2】:

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

不工作?你能告诉我们你的整个查询吗?确切的错误消息是什么?

【讨论】:

  • 你说的“单算子”是什么意思?如果你是这个意思,我不指定字段,只使用VALUES-Operator:答案是“否”
【解决方案3】:

如果没有实际的错误消息,很难说出您遇到了什么具体问题。
但是为了解决所有可能的问题,

  • 首先,您必须阅读官方手册页,让自己了解 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);

以这种方式运行查询永远不会有任何问题。或者至少是全面的错误消息。

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 2015-02-05
    • 2011-01-10
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多