1

你能告诉我这个更新声明有什么问题吗?没有在 mysql 中更新我的数据库记录

$updateid = $row[id]; 

$result2 = mysql_query("UPDATE grades SET processed = 1
where 'id' = '$updateid'") or die(mysql_error()); 
4

2 回答 2

3

ColumnNames以及 TableName)不应用单引号括起来,因为它们是标识符而不是字符串文字。用单引号包裹标识符使其成为字符串文字。

UPDATE grades 
SET processed = 1
where id = '$updateid'

如果您不确定您使用的 columnName (或 TableName ) 是否是保留关键字,请使用反引号而不是单引号将其分隔。例如,

UPDATE `grades` 
SET `processed` = 1
where `id` = '$updateid'

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-12T16:14:20.933 回答
1

您正在引用您的列名。如果你想这样做(这里没有必要),你应该使用反引号:

$result2 = mysql_query("UPDATE grades SET processed = 1
             where `id` = '$updateid'") or die(mysql_error());

除此之外,您应该确保您的变量可以安全地用于 sql 查询,最好使用 PDO(或 mysqli)和准备好的语句。如果您真的想使用已弃用的mysql_*功能,您应该使用mysql_real_escape_string().

于 2013-03-12T16:14:45.387 回答