2013-09-15 3 views
0

Я работаю над формой регистрации пользователя, и я получаю синтаксическую ошибку mysql, я понятия не имею, почему.Синтаксическая ошибка mySQLi в запросе

$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', 
'[email protected]', '29940b146d722a311446ca2d68f9739d' at line 1 

Q=INSERT INTO users (username, email, password, confirmed, key) VALUES 'jirikrewinkel', 
'[email protected]', '29940b146d722a311446ca2d68f9739d', 0, 
'd64a340bcb633f536d56e51874281454') 

ответ

1

Вам нужно бежать reserved words in MySQL как key с

обратными кавычками
INSERT INTO users (username, email, password, confirmed, `key`) ... 
           here---------------------^---^ 

Как правило, вы можете увидеть проблему прямо в сообщении об ошибке. Проблема, о которой идет речь в сообщении об ошибке.

You have an error in your SQL syntax; check the manual ... for the right syntax to use near 'key)

+0

Это сделало трюк, удивительный! Я не знал о зарезервированных ключевых словах, спасибо за предоставление ссылки. –

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

0

Вы должны использовать кавычку на «ключ»

Кроме того, я бы не избежать пароль, потому что он превратится в контрольную сумму, и она могла бы стать проблема, если кто-то использует символы, такие как ' в пароле.

Смежные вопросы