PHP/MYSQL更新查询不起作用

Sep*_*oth 2 php mysql sql get sql-update

任何人都可以告诉我为什么这个更新查询不起作用?

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.";
}
Run Code Online (Sandbox Code Playgroud)

先感谢您.

编辑:我得到了查询工作.对于担心安全问题的人,我使用此脚本作为测试,看看我是否想要使用它.我刚刚添加了安全性,因为脚本可以工作.谢谢大家的帮助和提示.

the*_*ect 7

试试这个查询行:

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

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

die("Query failed: " . mysql_error());
Run Code Online (Sandbox Code Playgroud)

*另外,只是一个FYI,你应该真的逃避用户变量(例如GET变量),以防止SQL注入:

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

请报告结果.

  • +1因为OP需要在第二次读取有关sql注入的内容 (3认同)

spi*_*ire 6

列读什么?

mysql_query("UPDATE contact SET read = 1 WHERE id = '$_GET[update]'")
Run Code Online (Sandbox Code Playgroud)

从读取的非大写来判断,我怀疑你在MySQL中使用了一个保留字来表示该列.

看到:

MySQL中的保留字

要解决这个问题,只需在阅读时单引号即可.IE

mysql_query("UPDATE contact SET 'read' = 1 WHERE id = '$_GET[update]'")
Run Code Online (Sandbox Code Playgroud)

或者每个j.bruni更好:

mysql_query("UPDATE contact SET `read` = 1 WHERE id = '$_GET[update]'")
Run Code Online (Sandbox Code Playgroud)

  • 手册建议使用"反引号"字符而不是引号. (3认同)