【问题标题】:Insert mysql error when parsing a webpage解析网页时插入mysql错误
【发布时间】:2013-05-14 01:32:46
【问题描述】:

您好,当我想在我的数据库中插入评论时,我会使用 Mysql Escape String 函数清理数据,但会在字段中逐字插入以下内容。我打印评论,它工作正常并向我显示文本但是当我对其进行清理时,它实际上将以下内容插入到我的数据库中

  mysql_real_escape_string(Comment)

这是我的插入语句,ID 插入正确,但注释不只是将“mysql_real_escape_string(Comment)”插入到字段中。有什么问题?

 foreach($html->find("div[class=comment]") as $content){
  $comment = $content->plaintext;
  $username = mysql_real_escape_string($comment);
   $querytwo = "insert into Tchild(Tid,Tcomment)values('$id','$username')";

   $resulttwo = $db -> Execute($querytwo);
  }

【问题讨论】:

  • mysql_real_escape_string 已弃用,请改用 mysqli_real_escape_string
  • 你在这里使用mysqli还是别的什么?
  • @tadman 不,我没有在其他任何地方使用 Mysqli
  • 我只是想知道您使用的是什么 MySQL 层,因为您调用的 $db->Execute 并不熟悉。
  • @JOELEE $id 被分配给一个整数并且它插入很好,但是当我使用 mysql_real_escape 时注释(字符串)没有插入

标签: php mysql


【解决方案1】:

如果我没看错the documentation,你应该这样打电话:

$db->Execute("insert into Tchild(Tid,Tcomment)values(?, ?)", array($id, $username));

这将解释正确的转义。在查询字符串中包含未转义的值是危险的,应尽可能避免。由于您的数据库层支持像 ? 这样的 SQL 占位符,因此您应该在任何时候将数据放入查询中时充分利用这些占位符。

除非您使用mysql_query,否则无法调用mysql_real_escape_string。它需要连接到 MySQL 数据库才能正常运行。

【讨论】:

  • 数组究竟是如何工作的?在您输入的值中?,?然后你把数组和右边的值放在一起。我想在里面放什么?,?为什么阵列在那里?谢谢
  • 是的,我使用 ADODB 并使用它。该数组是您对参数化 sql 语句中占位符(“?”)的映射。
  • +1 想了想,比我更喜欢你的回答。
  • 所以我用这个例子替换了它,它实际上只是在每个字段中添加了“评论”。该字段是 mediumtext 和 latin1_swedish 排序规则
  • 您应该在执行查询之前仔细检查您的变量是什么。出于某种原因,$username 可能是 "comment"
【解决方案2】:

由于您使用的是 ADODB,因此您想要的可能是 $db->qstr()。例如:

$username = $db->qstr($comment, get_magic_quotes_gpc());

有关更多信息,请参阅此页面:http://phplens.com/lens/adodb/docs-adodb.htm

【讨论】:

  • 如果 ADOdb 有占位符,这完全是多余的。
  • @tadman 对此感到抱歉,我在复制和粘贴时滑倒了。如果您查看我链接到的 ADODB 文档,您就会明白为什么会调用 get_magic_quotes_gpc()。
  • 我们是否假设 IIS 的 php 插件
  • 是的,在你修好之后就看到了。尽管如此,打开“魔术引号”是一个非常糟糕的主意,应该关闭而不是在代码中考虑。
  • 仅供参考,您不必在 ADODB 中使用占位符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2012-08-08
  • 2013-02-10
  • 2018-03-13
相关资源
最近更新 更多