【问题标题】:PHP/MYSQL Update query not workingPHP/MYSQL 更新查询不起作用
【发布时间】:2012-06-06 21:20:08
【问题描述】:

谁能告诉我为什么这个更新查询不起作用?

if ($_GET['update']) {
include 'config.php';
//Connect to MYSQL Database server
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Could not connect to MYSQL Database.");
$result = mysql_select_db(DB_NAME, $connect) or die("Could not connect to MYSQL table.");

mysql_query("UPDATE contact SET read = 1 WHERE id = '$_GET[update]'")or die("Query failed.");
echo "Update works!";
} else {
echo "Update does not work...ughh.";
}

提前谢谢你。

编辑:我得到了查询工作。对于任何担心安全性的人,我使用这个脚本作为测试,看看我是否想使用它。现在脚本可以正常工作,我刚刚添加了安全性。谢谢大家的帮助和提示。

【问题讨论】:

  • 不是来调试代码的,你遇到了什么错误?

标签: php mysql sql get sql-update


【解决方案1】:

什么是列读取?

mysql_query("UPDATE contact SET read = 1 WHERE id = '$_GET[update]'")

从 read 的非大写来看,我怀疑您在 MySQL 中为该列使用了保留字。

见:

Reserved Words in MySQL

要解决这个问题,只需在 read 周围加上一个单引号。即。

mysql_query("UPDATE contact SET 'read' = 1 WHERE id = '$_GET[update]'")

或者根据 j.bruni 更好:

mysql_query("UPDATE contact SET `read` = 1 WHERE id = '$_GET[update]'")

【讨论】:

  • 这个!谢谢你,朋友!哈哈,我觉得使用“阅读”很愚蠢。大声笑最佳答案。
  • 手册推荐使用“反引号”字符而不是引号。
  • 感谢一吨兄弟!被“匹配”(显然是一个关键字)卡住了:P
【解决方案2】:

为您的查询行试试这个:

mysql_query("UPDATE contact SET read = 1 WHERE id = '".$_GET[update]."'")or die("Query failed: " . mysql_error());

注意die() 语句的更改,以便更好地处理错误:

die("Query failed: " . mysql_error());

*另外,仅供参考,您真的应该像这样转义用户变量(例如 GET 变量)以防止 SQL 注入:

mysql_query("UPDATE contact SET read = 1 WHERE id = '".mysql_real_escape_string($_GET[update])."'")or die("Query failed: " . mysql_error());

请报告结果。

【讨论】:

  • +1 因为 OP 需要立即阅读有关 sql 注入的信息
  • 我还没有添加安全性!
  • 为什么要对所有内容都进行编码,然后再添加安全性,这似乎需要很多工作才能回头再做,为什么不一次就做好呢?
  • 错误是:Query failed: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'read = 1 WHERE id = '148'' 附近使用正确的语法
  • 梅林努力带来的错误信息;尼克给出了正确的答案; Spitfire 获得了荣誉并获得了积分;我们可以认为这是公平的,因为这是他第一次参与 SO 网站。
【解决方案3】:

我相信您需要转义字符串以使 $_GET['update'] 将其值添加到字符串中。但是您确实应该使用准备好的语句,以免受到恶意用户的攻击。

准备好的声明:http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

    【解决方案4】:

    READ 是保留字。您需要将其放在反引号内或重命名您的字段。

    看看这个链接:

    http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

    【讨论】:

      【解决方案5】:

      你可以这样测试

      mysql_query("UPDATE contact SET read = 1 WHERE id = '".(int)$_GET['update']."'")or die("Query failed.");
      

      如果这不是特定的问题

      【讨论】:

        【解决方案6】:
        mysql_query("UPDATE contact SET read = 1 WHERE id = '.$_GET[update].'")or die("Query failed.");
        echo "Update works!
        

        请尽量不要使用mysql_query。它很旧,而且效率不高。为什么不尝试了解 PDO 并准备语句..?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-04
          • 1970-01-01
          • 1970-01-01
          • 2015-02-02
          相关资源
          最近更新 更多