0

このクエリは機能します:

$con = mysql_connect("localhost","root","pw");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("db", $con);

$sql="INSERT INTO l1_clubmsg (msg, subject, status)
VALUES
(1,1,1)";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);

しかし、私が変更すると:

$sql="INSERT INTO l1_clubmsg (msg, subject, status)
VALUES
(1,1,1)";

に:

$sql="INSERT INTO l1_clubmsg (msg, subject, status, to)
VALUES
(1,1,1,1)";

次のエラーが表示されます。

Error: 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 'to) VALUES (1,1,1,1)' at line 1

「to」列は l1_clubmsg に存在します

これがエラーになる理由はありますか? ありがとう

4

5 に答える 5

5

TOはmysqlで予約語であるため、列名として使用する場合は、次のようにエスケープする必要があります。

INSERT INTO l1_clubmsg (msg, subject, status, `to`) VALUES (1,1,1,1)

新しいバージョンのデータベースには新しい予約語が含まれている可能性があるため、通常はすべての列名とテーブル名をエスケープすることをお勧めしますが、この場合は1つだけが必要です。

于 2012-08-31T20:32:02.653 に答える
4

エラーが発生するのは、4列以上が原因ではありません。

toはキーワードであり、このように使用できないため、エラーが発生します。

クエリは次のように記述できます。

$sql="INSERT INTO l1_clubmsg (msg, subject, status, `to`)
VALUES
(1,1,1,1)";

あなたがここで見ることができるキーワードのリストについては

注:通常、クエリではキーワードを避けてください。また、使用する場合は、backticks( `)を使用してエスケープするようにしてください

于 2012-08-31T20:32:40.973 に答える
2

TOMySQLの予約語です。クエリでエスケープする必要があります。試す

$sql="INSERT INTO l1_clubmsg (msg, subject, status, `to`)
VALUES
(1,1,1,1)";

私が追加した句読点は、バックティックと呼ばれます。

于 2012-08-31T20:32:19.023 に答える
1

これtoはMySQLで予約されている作業だと思います。つまり、MySQLが列名として正しく解釈されることを確認する必要があります。それ以外の:

INSERT INTO l1_clubmsg (msg, subject, status, to)
VALUES
(1,1,1,1)

試す:

INSERT INTO l1_clubmsg (`msg`, `subject`, `status`, `to`)
VALUES
(1,1,1,1)

バックティックは、適切に解析されることを保証します。

于 2012-08-31T20:31:37.980 に答える
1

を引用符で囲む必要がありますTO

于 2012-08-31T20:33:50.207 に答える