-1

私は本当にこれで髪を引っ張っています。自作の php アプリに簡単なコメント セクションがあり、$_GET パラメーターをキャッチした場合に新しい行を追加したいだけです。しかし、MySQL 挿入要求をどのように構築しても、エラーが発生します。

これは私がこれまでに持っているものです:

if(isset($_GET['r'])){
    $replyid = mysql_real_escape_string($_GET['r']);
    $sentnow = date("Y-m-d H:i:s");
    mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."'") or die(mysql_error());
    echo '<meta http-equiv="refresh" content="0;/messages">';
}

私の MySQL DB フィールドはまったく同じように呼び出されます。

たとえば、「index.php?r=777」で上記のページを実行すると、MySQL に次のような新しい行が入力されるはずです。

messageid = (AUTO_INCREMENT)
toid = 777
from = TESTUSER
contact = CONTACTINFO
seen = 0
message = MESSAGE
date = 2013-01-17 11:50:01

代わりに、次のエラーが表示されます。

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 'from, contact, seen, message, date) VALUES (NULL, '1', 'TESTUSER', 'CONTACTINFO'' at line 1

「error_reporting(E_ALL)」で表示される同じエラー。

これを数日間調べましたが、エラーが見つかりません...おそらく私は盲目で、コンマや終了タグ​​などを見逃しています。何か案は?

4

6 に答える 6

5

これは、列名として予約語 (from および date) を使用しているためです。

それらを `` で囲みます

すなわち:

INSERT INTO eis_inbox (`messageid`, `toid`, `from`, `contact`, `seen`, `message`, `date`)
于 2013-01-17T10:59:47.583 に答える
2

日付は mysql のキーワードで、` 記号で囲む必要があります。これは、将来の使用のために公式ドキュメントからの MySQL の予約語の完全なリストです

これとは別に、値の括弧は閉じていません。

これを使って。これがうまくいくことを願っています。

INSERT INTO eis_inbox (`messageid`, `toid`, `from`, `contact`, `seen`, `message`, `date`) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')"

ありがとう。

于 2013-01-17T11:00:28.190 に答える
1

ここにいくつかの構文エラーがあります:

  • 生成されたクエリの最後に括弧がありません。
  • fromおよびdateは予約キーワードであり、`で囲みます。
  • seenおよびtoidvarcharフィールドではないため、それらの値をで囲むことはできません'

試す :

mysql_query("INSERT INTO eis_inbox (messageid, toid, `from`, contact, seen, message, `date`)
VALUES (NULL, ".$replyid.", 'TESTUSER', 'CONTACTINFO', 0, 'MESSAGE', '".$sentnow."')");

警告:これはSQLインジェクションに対して脆弱です。mysql_*コマンドを使用せず、代わりにPDOouを試してください。mysqliプリペアドステートメントは、それらを回避するのに役立ちます。

于 2013-01-17T11:01:26.557 に答える
1

mysql direct では予約語を使用できません

from は予約語です

簡単な例

INSERT INTO eis_inbox (messageid, from) VALUES (1,2);

-- 不適切なクエリです

INSERT INTO eis_inbox (messageid, `from`) VALUES (1,2);

-- 正しいクエリです

しかし、そのような状況は避けたほうがよいでしょう。これは、将来の使用のために公式ドキュメントからの MySQL の予約語の完全なリストです

于 2013-01-17T11:01:13.970 に答える
0

ブラケットがありません

mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')") or die(mysql_error());
于 2013-01-17T11:02:43.007 に答える
0

値の終了タグが欠落しており、from が保持されているため、エスケープする必要があります... (引用符を使用してトリックを行う必要があります...:

mysql_query("INSERT INTO eis_inbox (messageid, toid, from, contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."'") or die(mysql_error());

する必要があります

mysql_query("INSERT INTO eis_inbox (messageid, toid, 'from', contact, seen, message, date) VALUES (NULL, '".$replyid."', 'TESTUSER', 'CONTACTINFO', '0', 'MESSAGE', '".$sentnow."')") or die(mysql_error());

また、zanが述べたように、mysql_*関数を使用しないでくださいが、mysqli_*またはPDO ...

于 2013-01-17T11:00:12.943 に答える