あなたのSQL構文でエラーが発生しています。 'username'、 'password'、 'key'、 'email'、 'rank'、 'ip'、 'active'の近くで使用する正しい構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックしてください)VALUES( 'wxライン1SQL構文エラー
SQL構文エラー
答えて
で」、'79' を列名の前後に引用符を失う
単一引用符で列名を入れないでください:。
$query = "INSERT INTO users(username, password, key, email, rank, ip, active)
VALUES ('$username','$password','$random','$email','1','$ip','0')";
私たちは、SQLインジェクションの問題を無視します今のところ:-)
"近くの" user ... "を使用する正しい構文は良いヒントです。カラム名の前後に ''を置いてください。
フィールド名の前後の一重引用符を削除します。 エラーメッセージは、問題のヒントを示しています。
check the manual that corresponds to your MySQL server version for the right syntax to use near ''username', 'password', 'key', ...
(`username`, `password`, `key`, `email`, `rank`, `ip`, `active`)
に
('username', 'password', 'key', 'email', 'rank', 'ip', 'active')
を変換し、フィールド名は非引用しまたはのいずれかである必要があり(バックティックまたはバック引用符で囲む)をbackticked 。
MS SQL Serverでは、フィールド名は引用符で囲まれていないか、[角括弧]で囲む必要があります。
ほとんどのSQL DBMSはSQL標準に準拠しており、フィールド名は引用符で囲まれていないか、"二重引用符"で囲まれていて、「区切り識別子」と呼ばれます。場合によっては、区切られた識別子の処理(それ自体が非標準的な動作です)を有効にする必要があります。
名前の前後にあるアポストロフィを削除するだけでなく、データベースプロバイダで予約されているキーワードの場合は、識別子の一部を識別子として指定する必要があります。
SQL Serverの場合、角括弧を使用して識別子を指定します([password]
)。ただし、エラーメッセージからは、ブラケットの代わりにバッククォート( `)を使用するMySQLを使用しているようです。 (このフォーラムではコードブロックのバッククォートを使用しているので、例を書くことはできませんでしたが、とにかくそれを得ると思います)。
テーブルのデータタイプによっては、アポストロフィいくつかの値。たとえば、rank
が数値フィールドの場合は、数値の1の前後にアポストロフィがないはずです。
エラーが発生した場所から判断すると、データをデータベースに送信する前にエスケープしておらず、パスワードの3文字目がアポストロフィ( ')でした。
たMySQLの使用しているAPIに応じて、次の関数のいずれかをお勧めします: mysql_real_escape_string
、mysqli_real_escape_string
、またはpdo_quote
は、データベースに渡す前に各変数をエスケープします。
また、MySQLiまたはPDOを使用している場合は、これを行うためのバインドパラメータとともにprepared statementを使用してください。
INSERT INTO users('username', ...
イタチが指摘したように、ここでは一重引用符は必要ありません。あなたは/名前として予約語を使用する必要がある場合は、あなたが何か他のものでそれらを区切るために持って、次のいずれか
- `バッククォート`、デフォルトのMySQLの方法、または
- 「二重引用符」、標準のANSI SQL他のデータベースによってサポートされています。
あなたは、クロスDBMSと互換性のあるコードを使用したい場合は、(つまり、他のアプリケーションと干渉しない場合、またはサーバのデフォルト)ANSI_QUOTESを許可するように、接続のsql_modeのを設定することは悪い考えではありませんここに。
('$username', ...
これまでに$ usernameを処理してそれをエスケープしない限り、あなたのアプリケーションに素敵なSQL injectionセキュリティホールを招待しました。 mysql_real_escape_stringを参照するか、パラメータ化されたクエリを使用してこれを回避することをお勧めします。
- 1. SQLエラー - エラーSQL構文
- 2. 構文エラー - sql
- 3. SQL構文エラー
- 4. SQL構文エラー
- 5. SQL構文エラー
- 6. SQL構文エラー
- 7. エラーSQL構文
- 8. SQL構文。エラー
- 9. SQL構文エラー
- 10. SQL - SubQuery - SQL構文のエラー
- 11. SQL構文のエラー
- 12. SQL構文エラー:near "。"?
- 13. SQLダンプアップロード構文エラー
- 14. SQL:エラー構文#1064
- 15. SQL OFFSET構文エラー
- 16. SQL構文エラーSELECT
- 17. java sql構文エラー
- 18. SQL構文エラー/クエリ
- 19. SQL concat_ws構文エラー
- 20. MYSQL SQL構文エラー
- 21. エラー1064:SQLの構文エラー
- 22. エラー1064 sql構文エラー
- 23. SQLエラー42X01:構文エラー:
- 24. Groovy SQL文の構文エラー
- 25. SQL文の構文エラー
- 26. PDO SQL文の構文エラー
- 27. SQL構文のエラー(MYSQL 5.0)
- 28. EXPLAINのSQL構文エラー
- 29. sql反復構文エラー
- 30. のOracle SQL構文エラー
または[括弧で括られた] ...「バックティッキー」とは何か質問できますか? –
バッククォートは、区切られた識別子を処理するMySQLの非標準的な方法です。角括弧は、区切られた識別子を処理するMS SQL Serverの非標準的な方法です。二重引用符は、区切られた識別子を処理するSQLの標準的な方法です。一重引用符は常に文字列リテラルの周りにあります。 –
「this_word」が取り消されました。 – thomasrutter