この更新ステートメントの何が問題なのか教えていただけますか? mysql でデータベース レコードを更新しない
$updateid = $row[id];
$result2 = mysql_query("UPDATE grades SET processed = 1
where 'id' = '$updateid'") or die(mysql_error());
ColumnNames
(および TableName ) は、文字列リテラルではなく識別子であるため、一重引用符で囲むことはできません。識別子を一重引用符で囲むと、文字列リテラルになります。
UPDATE grades
SET processed = 1
where id = '$updateid'
使用している columnName (または TableName ) が予約済みのキーワードであるかどうか不明な場合は、一重引用符ではなくバッククォートで区切ります。例えば、
UPDATE `grades`
SET `processed` = 1
where `id` = '$updateid'
補足として、変数のSQL Injection
値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements
列名を引用しています。それを行いたい場合 (ここでは必要ありません)、バッククォートを使用する必要があります。
$result2 = mysql_query("UPDATE grades SET processed = 1
where `id` = '$updateid'") or die(mysql_error());
それとは別に、できればPDO(またはmysqli)と準備されたステートメントを使用して、変数がSQLクエリで安全に使用できることを確認する必要があります。mysql_*
非推奨の関数を本当に使用したい場合は、 を使用する必要がありますmysql_real_escape_string()
。