1

私は、ユーザーが互いにメッセージを送信できるようにするコードを書いています。メッセージをデータベースに挿入しようとすると、構文エラーが発生しますが、私は一生の間、エラーが何であるかを理解できません。問題が内にないことを知っていますconnect.php。また、、、の適切な値を取得しているので$from、問題$to$messageなることはありません。これが私のコードです:

session_start();

require_once('../setup/connect.php');

$from = $_SESSION['id'];
$to = $_REQUEST['id'];

$message = trim($_POST['msg_body']);    
$insert = "INSERT INTO messages(to, from, msg) VALUES('$to', '$from', '$message')";

mysql_query($insert) or die(mysql_error());

header("Location: view_profile.php?id=$to");

レポートmysql_error()が生成するものは次のとおりです。

SQL構文にエラーがあります。1行目の'to、from、msg)VALUES(' 7'、' 6'、' Hey how are you?')'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

そして、これが私のデータベース構造の画像です。ここに画像の説明を入力してください

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

4

2 に答える 2

5

TOFROMは予約キーワードであり、バックティックでエスケープする必要があります

INSERT INTO messages(`to`, `from`, msg) 
VALUES('$to', '$from', '$message')

変更する時間または特権がある場合は、予約済みキーワードリストにあるような名前を使用しないでください。それはあなたに将来の頭痛を与えるでしょう。

SQL Injection補足として、値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。PreparedStatementsを使用すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-22T15:45:30.740 に答える
1

FROM予約語です。列名として使用しないでください。あなたがそれを使うことを主張するならば、あなたはそれを引用しなければなりません:

INSERT INTO messages("to", "from", msg) 
VALUES('$to', '$from', '$message')

または、MySQLインストールをANSIモードで実行していない場合は、恐ろしい非標準のバックティックを使用する必要があります。

INSERT INTO messages(`to`, `from`, msg) 
VALUES('$to', '$from', '$message')
于 2013-01-22T15:47:20.027 に答える