3

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

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.";
}

先感谢您。

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

4

6 回答 6

7

试试这个为您的查询行:

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());

请报告结果。

于 2012-06-06T21:25:12.690 回答
7

什么是列读?

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

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

看:

MySQL 中的保留字

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

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

或者每个 j.bruni 更好:

mysql_query("UPDATE contact SET `read` = 1 WHERE id = '$_GET[update]'")
于 2012-06-06T21:31:12.917 回答
3

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

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

于 2012-06-06T21:23:55.060 回答
3

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

看看这个链接:

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

于 2012-06-06T21:26:48.950 回答
0

你可以这样测试

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

如果这不是特定的问题

于 2012-06-06T21:23:30.133 回答
0
mysql_query("UPDATE contact SET read = 1 WHERE id = '.$_GET[update].'")or die("Query failed.");
echo "Update works!

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

于 2012-06-06T21:28:20.057 回答