1

次のエラーの解決策をインターネットで探していました。

"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 'primary, username, password, password2) VALUES (null, 'hello', 'hello', 'hello')' at line 1"

何が起こっているのかわからない..私のコードが何であるかを尋ねることはわかっているので、ここに:

$con = mysql_connect("localhost","root","*****");
    if (!$con)
      {
      die('Server overload, please try again' . mysql_error());
      }

    mysql_select_db("users", $con);

    $sql = "INSERT INTO details (primary, username, password, password2) VALUES (null, '$_POST[username]', '$_POST[password]', '$_POST[password2]')";

    if (!mysql_query($sql,$con))
      {
      die('Error: Server overload, try again' . mysql_error());
      }
    echo "You have signed up successfully!";

    mysql_close($con);

私は今、約4/5時間それを理解しようとしてきましたが、成功していません.
ありがとう、
ローレンス

4

4 に答える 4

8

primaryは SQL の予約キーワードです。つまり、次のいずれかを行う必要があります。

  • その列の名前を変更します-そのような奇妙な状況を避けるために、良い考えです
  • またはその名前の前後にバッククォートを使用します

2 番目のケースのクエリは次のようになります。

INSERT INTO details (`primary`, `username`, `password`, `password2`)
VALUES (null, 'hello', 'hello', 'hello')


注 : SQL インジェクションmysql_real_escape_stringを避けるために、 を使用して値をエスケープする必要があります。

于 2010-02-28T19:40:29.573 に答える
2

テーブルや列にプライマリや詳細などの比較的一般的な名前を付けないようにしてください。

現在使用している SQL のフレーバーの予約語ではないかもしれませんが、いつ他のタイプ (Postgres、Oracle など) をサポートするかわかりません。

この便利な予約語チェッカーも使用できます。

フォローアップの質問:
あなたが受け取っているエラー ステートメントを誰が書いたか知りたいのですが、それは本質的にRTMと書かれていますか? 陽気な。これを次の try catch で使用します。:)

于 2010-02-28T19:43:07.503 に答える
1

Primary は予約語です。テーブル定義とは何ですか?

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

于 2010-02-28T19:36:30.770 に答える
1

その最初の列の名前を別の名前に変更します。「プライマリ」は MySQL の予約語です。

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

于 2010-02-28T19:37:21.050 に答える