2010-01-24 8 views
2

Кто-то мне помочь:Что случилось с этим вопросом?

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level 
      , regdate, lastdate, email) VALUES('$username', sha1('$password') 
      , sha1('$password'), '$userid', '0', NOW(), NOW(), '$email');"; 

$userid является ramdon md5 идентификатор.

Это дает мне эту ошибку:

posttokenError: Account not created 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 '\'esck21\', sha1(\'password\'), sha1(\'password\'), 
    \'14bd25cbe111c2975232b33ee8c2' at line 1 

Я думаю, что я буду иметь сердечный приступ. Спасибо.

ответ

2

Судя по сообщению об ошибке, это выглядит, как вы могли бы называть какие-то избежать функции на весь запрос, такие как addslashes($query) или mysql_real_escape_string($query). Это позволит избежать каждой цитаты в запросе, когда действительно то, что вы хотите сделать, - это избежать только кавычек, находящихся внутри ваших переменных.

Если это так, то вы хотите делать что-то вроде этого, вместо:

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level, 
regdate,lastdate, email) VALUES('".mysql_real_escape_string($username)."', 
sha1('".mysql_real_escape_string($password)."'), 
sha1('".mysql_real_escape_string($password)."'), 
'".mysql_real_escape_string($userid)."', '0', 
NOW(), NOW(), '".mysql_real_escape_string($email)."')"; 

Это будет правильно избежать данных без ошибочно спасаясь от остальной части запроса. Как только вы это сделаете, не запускайте $query как целую строку с помощью других форм экранирования.

+0

+1 Я считаю, что это правильный ответ. –

+0

Не следует ли возвращать поле 'password'? –

+0

Я не знаю, почему этот ответ занижен. Сообщение об ошибке ясно показывает обратную косую черту, где они не должны быть, в результате чего вставляются некотируемые значения, где ожидается строковое значение, а значение без кавычек интерпретируется как недопустимое имя столбца (я считаю) –

1

Вы должны кавычка (`) поле пароля:

$query = "INSERT INTO `tbl_users` (`user`, `password`, `password_def`, `userid` 
       , `level`, `regdate`, `lastdate`, `email`) 
      VALUES('$username', 'sha1($password)', 'sha1($password)', '$userid' 
       , '0', NOW(), NOW(), '$email');"; 

Вы всегда должны кавычкой своих полей, таблицы и базы данных.

Еще одна вещь: обратите внимание на SQL Injections, используйте mysql_real_escape_string().


После некоторого обсуждения я убежден, что ваша проблема заключается в использовании вашего цитирования, проверьте зомбат.

+0

это не сработало. – CSSJediEsck21

+0

@ CSSJediEsck21: Возможно, это была функция 'sha1()', должна быть '' sha1 ($ pass) ''вместо' sha1 (' $ pass ') '. Я обновил его. Попробуй еще раз. –

+0

@Alix, re: полуточка: Упс, ничего не угадывай. Никогда не видел, чтобы запятая включалась раньше, если только она не находится непосредственно в файле sql. Узнал что-то новое – munch

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