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値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-12T16:14:20.933 に答える
1

列名を引用しています。それを行いたい場合 (ここでは必要ありません)、バッククォートを使用する必要があります。

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

それとは別に、できればPDO(またはmysqli)と準備されたステートメントを使用して、変数がSQLクエリで安全に使用できることを確認する必要があります。mysql_*非推奨の関数を本当に使用したい場合は、 を使用する必要がありますmysql_real_escape_string()

于 2013-03-12T16:14:45.387 に答える