2

SQLに問題があります。

このSQLステートメント:

SELECT * from chat WHERE id = 16

出力:

配列([id] => 16 [from] => 5 [to] => 6[message]=>メッセージ例[time]=>1337674546)

次のSQLステートメント:

SELECT * from chat WHERE from = 5

エラーを出力します:

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

ご覧のとおり、2番目のステートメントは同じ結果を返すはずですが、そうではありません。

以下を含むXAMPPの新しいインストールを使用しています:
Apache / 2.2.21(Win32)mod_ssl / 2.2.21 OpenSSL / 1.0.0e PHP / 5.3.8 mod_perl / 2.0.4 Perl / v5.10.1
MySQLクライアントバージョン:mysqlnd 5.0 .8-dev-20102224-$リビジョン:310735 $

ここで明らかな何かが欠けているようですが、何が起こっているのか理解できません。

4

5 に答える 5

1

2番目のクエリを次のように変更します。

SELECT * from chat WHERE `from`=5

fromは予約済みのキーワードであり、機能させるには常に使用を避けるか、少なくとも引用符で囲む必要があります。

于 2012-05-22T09:05:13.037 に答える
0

fromはMySQLのキーワードであるため、キーワードをエスケープする必要があります。したがって、MySQLはそれを列名として扱うことができます。キーワードをエスケープするには、「」を使用します。

あなたはこれを試すことができます。

SELECT * from chat WHERE `from`=5;
于 2012-05-22T09:05:23.393 に答える
0

この単語fromをフィールド名として使用しているため、予約語であるため、バックティック`でエスケープする必要があります。

これがSQL全体をエスケープして大文字にしたものです。

SELECT * FROM `chat` WHERE `from` = 5
于 2012-05-22T09:05:58.650 に答える
0
SELECT * FROM `chat` WHERE `from`='5'
于 2012-05-22T09:09:12.270 に答える
0

MY SQLの予約キーワードと同様に、エスケープするにはバッククォートformを使用する必要があります。

 SELECT * FROM chat WHERE `from`=5;
于 2012-05-22T09:11:15.823 に答える