你能告诉我这个更新声明有什么问题吗?不在mysql中更新我的db记录
$updateid = $row[id];
$result2 = mysql_query("UPDATE grades SET processed = 1
where 'id' = '$updateid'") or die(mysql_error());
答案 0 :(得分:3)
ColumnNames
(以及TableName )不应该用单引号括起来,因为它们是标识符而不是字符串文字。用单引号包装标识符使其成为字符串文字。
UPDATE grades
SET processed = 1
where id = '$updateid'
如果您不确定您使用的columnName(或TableName )是否为保留关键字,请使用反引号分隔,而不是使用单引号。例如,
UPDATE `grades`
SET `processed` = 1
where `id` = '$updateid'
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:1)
您正在引用您的列名称。如果你想这样做(这里没有必要),你应该使用反引号:
$result2 = mysql_query("UPDATE grades SET processed = 1
where `id` = '$updateid'") or die(mysql_error());
除此之外,您应该确保您的变量在sql查询中使用是安全的,最好使用PDO(或mysqli)和预处理语句。如果您确实想使用已弃用的mysql_*
函数,则应使用mysql_real_escape_string()
。