0

PHP を使用してデータベースの基本的な更新を実行していますが、SQL 構文エラーが発生し、何が問題なのかわかりません。データベースのフィールドはordersと呼ばれ、int(8)に設定されています。それをsmallintとvarcharに変更しようとしましたが、増加しましたが、喜びはありませんでした。また、クエリで「」と「」をいじってみました。コードは次のとおりです...

    $query = "UPDATE gigs SET order='$order' WHERE gig_id='$id'";
    if ($r = mysql_query($query) ) {
        echo  "<p>UPDATED:" . $row['year'] ." - " . $row['month'] . " - " .  $row['day'] . " = $order</p>";
    } else {
        echo "<p>" . mysql_error() . "<br />$q</p>";
    }

$order は年月日の値を 1 つの整数値に結合したものです (例: 12 apr 2013 = 20130412)。

ここに私が得るエラーメッセージがあります

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 near 'order='20040802' WHERE gig_id='10'' at line 1 UPDATE gigs SET order='20040802' WHERE gig_id='10'

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 near 'order='20040804' WHERE gig_id='11'' at line 1 UPDATE gigs SET order='20040804' WHERE gig_id='11'

4

2 に答える 2

5

ORDERは予約済みキーワードです。ステートメントが例外をスローしないようにするには、バッククォートで列をエスケープする必要があります。

UPDATE gigs SET `order` = '$order' WHERE gig_id = '$id'

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-12T17:49:05.627 に答える
1

@EdHeal 数値の場合、MySQL は引用されているかどうかを気にしません。数値であることがわかっている場合は引用しませんが、動的クエリを何度も作成したため、すべてを引用します。もちろん、さらに良いオプションは、PDO とバインドされたパラメーターを使用することです;)

于 2013-04-12T18:03:52.850 に答える