【问题标题】:UPDATE statement doesn't get triggered on new serverUPDATE 语句不会在新服务器上触发
【发布时间】:2014-11-21 19:52:07
【问题描述】:
foreach($article AS $key => $value)
{
    mysql_query("UPDATE articles SET description = '".mysql_real_escape_string($value)."' WHERE id = '".$key."'");
}

大家好,

我有一个非常简单的 foreach 循环,我在其中运行 UPDATE 查询。是的,我知道我应该使用 PDO,但我只是在测试它,所以不用担心。 $key$value 不为空。我已经验证了它们的值是预期的值。 $value 包含一个带有多个 \n(新行)的字符串。

现在脚本在我的服务器上运行,但只要我在另一台服务器上尝试它,UPDATE 语句就不会被触发。没有错误或警告。似乎其他服务器不喜欢 $value 的内容。事实上,如果我将 $value 例如替换为“abc”,它就可以工作。所以我在这里试图了解问题所在。然后? mysql_real_escape_string?我应该怎么做才能调试这个问题?

【问题讨论】:

  • 如果您只是学习 PHP,请不要学习过时的mysql_query 接口。这很糟糕,并且在 PHP 的未来版本中被删除。像PDO is not hard to learn 这样的现代替代品。像PHP The Right Way 这样的指南可以帮助解释最佳实践。始终绝对确定您的用户参数是properly escaped,否则您将遇到严重的SQL injection bugs
  • 尝试读取错误日志。
  • 所以测试错误,不要只是假设成功:mysql_query(...) or die(mysql_error()).

标签: php mysql foreach newline mysql-real-escape-string


【解决方案1】:

对不起,这是我的错。该脚本有效。这是由于解释与我的云实例的 CDN 缓存相关的事情非常复杂且冗长。我勒个去!对不起。

【讨论】:

    【解决方案2】:
    foreach($article AS $key => $value)
    {
        mysql_query("UPDATE articles SET description='{mysql_real_escape_string($value)}' WHERE id='{$key}'");
    }
    

    试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 2011-01-10
      相关资源
      最近更新 更多