Что не так с этим запросом? - PullRequest
2 голосов
/ 24 января 2010

Кто-нибудь, помогите мне:

$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 id.

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

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 ]

2 голосов
/ 24 января 2010

Судя по сообщению об ошибке, похоже, что вы вызываете какую-то экранирующую функцию для всего запроса , например 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 как целую строку через другие формы экранирования.

1 голос
/ 24 января 2010

Вам необходимо ввести галочкой ( `) поле пароля:

$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-инъекции , используйте mysql_real_escape_string().


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...