0

ユーザー登録フォームに取り組んでいますが、mysql 構文エラーが発生しますが、理由はわかりません。

$username =  mysqli_real_escape_string($con, $_POST['username']);
$email =  mysqli_real_escape_string($con, $_POST['email']);
$password =  md5(mysqli_real_escape_string($con, $_POST['password']));
$key = md5(rand(1, 1000));
$q = "INSERT INTO users (username, email, password, confirmed, key) 
      VALUES ('$username', '$email', '$password', 0, '$key')";

mysqli_query($con, $q) or die(mysqli_error($con)." Q=".$q);

接続は問題ないので問題ありません。それは私にこのエラーを与えています:

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 'key) VALUES ('jirikrewinkel',   
'jiri@mail.com', '29940b146d722a311446ca2d68f9739d' at line 1 

Q=INSERT INTO users (username, email, password, confirmed, key) VALUES 'jirikrewinkel',
'jiriaesthetics@gmail.com', '29940b146d722a311446ca2d68f9739d', 0,
'd64a340bcb633f536d56e51874281454')
4

3 に答える 3

1

バッククォートのようにMySQLの予約語をエスケープする必要がありますkey

INSERT INTO users (username, email, password, confirmed, `key`) ...
                                here---------------------^---^

通常、エラー メッセージで問題を確認できます。エラー メッセージの最初に出てくる単語が問題です。

SQL 構文にエラーがあります。マニュアルを確認してください...近くで使用する正しい構文については'key)

于 2013-09-15T18:35:08.360 に答える
0

keyは MySQL の予約語です。バッククォートで囲む必要があります `

$q = "INSERT INTO users (`username`, `email`, `password`, `confirmed`, `key`) 
      VALUES ('$username', '$email', '$password', 0, '$key')";

設計を変更し、テーブル列の名前を MySQL の予約語と一致しない別のパターンに変更することで、これを回避することをお勧めします。参照用に次の表を参照してください。

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

于 2013-09-15T18:36:40.060 に答える
0

「キー」にバッククォートを使用する必要があります

また、パスワードはチェックサムになり、誰かがパスワードのような文字を使用すると問題になる可能性があるため、パスワードをエスケープしません'

于 2013-09-15T18:38:48.427 に答える