0

これはエラーメッセージと私のコードです。エラーが表示されません。

説明:

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

クエリ:

SELECT * 
FROM wp_wpsc_api_keys 
WHERE name='MichelleAllen17' 
AND key='cbd1f3bb822e8617b624301774287490d3fcd97e' 
LIMIT 1

私のSQLで何が問題になる可能性があるかについてのアイデアは大歓迎です

4

3 に答える 3

8

KEYは予約済みのキーワードであるため、バックティックでエスケープする必要があります。

SELECT  * 
FROM    wp_wpsc_api_keys 
WHERE   name = 'MichelleAllen17' AND 
        `key` = 'cbd1f3bb822e8617b624301774287490d3fcd97e' 
LIMIT   1
于 2013-01-12T00:54:19.973 に答える
0

フィールド名の周りにバックティックを配置します

...where `name`=... `key`
于 2013-01-12T00:55:17.560 に答える
-1

バッククォートの代わりに、別の「ベスト プラクティス」パターンは、すべての列名を table_name または便利なテーブル エイリアスで修飾することです。

SELECT t.*
  FROM wp_wpsc_api_keys t 
 WHERE t.name='MichelleAllen17'
   AND t.key='cbd1f3bb822e8617b624301774287490d3fcd97e'
 LIMIT 1

これにより、MySQL が列名「key」を予約語として認識しなくなります。

明確にしましょう: クエリの問題はバッククォートの欠如ではありません... 問題は、MySQL がクエリ テキスト (この場合は「キー」) 内のトークンを名前ではなく予約語として認識していることです。列の。解決策は、MySQL がそのトークンをキーワードとして認識しないようにすることです。バッククォートを使用することはそれを実現する 1 つの方法ですが、必須ではありません。

バッククォートの使用は完全に有効であり、列名を修飾することと一緒に行うことができます。列名にスペースまたは特殊文字が含まれている場合は、backicks が必要です。テーブル名と列名がバッククォートで囲まれた同じクエリを次に示します。

SELECT t.*
  FROM `wp_wpsc_api_keys` t 
 WHERE t.`name`='MichelleAllen17'
   AND t.`key`='cbd1f3bb822e8617b624301774287490d3fcd97e'
 LIMIT 1

たまたま、不要なバッククォートを見たり入力したりしなければならないのは面倒です。t.複数のテーブルがある場合は常に列名が修飾されているのを見るのに慣れているという理由だけで、列名を修飾する (" ") ことは、(私にとって) キーストロークのはるかに便利な使用方法です。クエリ (これは、多くの非常に有用なクエリで頻繁に発生します。)

于 2013-01-12T01:00:13.057 に答える