0
$time=date("G:i:s j.n.Y");
$wholetime="$time";
mysql_query("INSERT INTO rivase_chat_posts SET sender='$user', content='$msg', time='$wholetime', 'to'='$affectuser'");
$msg="";

私はプライベートチャットをしています。それが私のコードです。このエラーが発生します:

SQL構文にエラーがあります。1行目の''から'='gs''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
($ user = "gskartwii"、$ msg = "HI"、$affectuser ='gs' )。

4

3 に答える 3

9

列名には、一重引用符ではなくバッククォートを使用します。

`to`='$affectuser'

一重引用符は文字列にのみ存在します。バックティック(通常はキーボードの数字の1の左側)は、mysqlの列名またはテーブル名に使用するものです。

編集:Michael Berkowskiが正しく指摘しているように、列名に対してこれを行う必要がある理由toは、mysqlの予約語であるためです。これは、mysqlが内部の何かを意味すると見なす特別な単語であるという素敵な言い方です。通常どおりクエリを実行します。その点で、予約語をテーブルの列として使用することは実際には最善のアイデアではないかもしれません-それらを使用するすべてのインスタンスでそれらをバッククォートする必要があります。toUser名前を変更して、プロジェクトの残りの部分をSQLアウトしやすくすることを検討することをお勧めします:)

于 2012-08-29T13:18:50.293 に答える
2

一重引用符の間に置き'to'ます。列名は引用符で囲まれていないか、逆引用符の間にあります。一重引用符は文字列用です。文字列を更新できないためSET 'to'='user'、エラーになります。

INSERT INTO rivase_chat_posts 
SET `sender`='$user', `content`='$msg', `time`='$wholetime', `to`='$affectuser'

更新:コメントによるtoと、これは予約語であり、常にエスケープする必要があります-バッククォートを使用してください。

于 2012-08-29T13:18:38.353 に答える
2

To予約語です。エスケープする:

INSERT INTO rivase_chat_posts 
SET sender='$user', content='$msg', time='$wholetime', `to` ='$affectuser'
于 2012-08-29T13:19:49.820 に答える