2

助けてくれてありがとう!

私はPHPでスクリプトを作成して、(この時点で)すでに有効期限が設定されているすべてのユーザーを削除しています。MySQL構文エラーが発生し、何が間違っているのか理解できません。

エラー:

クエリに失敗しました:SQL構文にエラーがあります。1行目の''tablename'WHERE date = '01'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

コード:

$query="DELETE FROM 'tablename' WHERE date='$exdate'";

変数が正しく渡されていることをテストするためだけにエコーを実行しました。

編集:私の間違いを明確にするために、「dbname」を「tablename」に変更しました。

解決済み:助けてくれてありがとう、私は適切な「引用符構文」を使用していませんでした。ありがとう!

4

5 に答える 5

5

テーブル名に一重引用符(')を使用せず、代わりに( `)を使用してください(キーボードの[〜]と同じ小文字)。

于 2012-11-14T04:08:54.533 に答える
0

あなたは周りに目盛りが必要かもしれませんdate

$query="DELETE FROM 'dbname' WHERE `date`='$exdate'";

ただし、エラーから、以前は構文が正しくなかったようです。ある種のエスケープを行っている場合は、このエラーが発生している可能性があります。

于 2012-11-14T04:09:15.310 に答える
0

最も簡単な修正

$query="DELETE FROM tablename WHERE date='$exdate'";

最良の(最も安全な)バージョンは

$query="DELETE FROM `tablename` WHERE `date`='$exdate'";

説明 :

tableNames, columnnames etc are enclosed in quotes like `name` instead of 'name'
Enclosing them in `` is optional usually, but if your tablename,columnane is some
what special word e.g 'table' then you can use `table` and not simply table

ここで使用できます

`tablename` (best) tablename (simplest) but not 'tablename'(worng)
于 2012-11-14T04:23:44.150 に答える
0

date は予約キーワードです。クエリ内では使用できません。date

于 2012-11-14T04:14:34.457 に答える
0

マジック クォーテーション (`) を使用している場合は、テーブル名をシングル クォーテーションしないでください。

文字列を連結してクエリを作成しないでください。

SQL インジェクションの潜在的な問題を回避するには、準備されたクエリを使用することをお勧めします。

mysqlサーバーでこれを確認しました

mysql> delete from 'sessions' where `last_activity` = 0;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''sessions' where `last_activity` = 0' at line 1
mysql> delete from sessions where `last_activity` = 0;
Query OK, 0 rows affected (0.00 sec)
于 2012-11-14T04:15:23.603 に答える