Ошибка синтаксиса MySQL. Не удается решить

Я хочу вставить 0 в некоторые поля таблицы db, но не могу заставить его работать. Кусок кода из моего php-скрипта регистрации выглядит так.

if (isset($type)) { if($type==1) { $region=$data['region']; $school=$data['school']; $class=$data['class']; $group='NULL'; $subject='NULL'; $university='NULL'; $profession='NULL'; } if($type==2) { $group=$data['group']; $region=$data['region']; $school=$data['school']; $class=$data['class']; $subject='NULL'; $university='NULL'; $profession='NULL'; } if($type==3) { $group='NULL'; $region='NULL'; $school='NULL'; $class='NULL'; $subject='NULL'; $university=$data['university']; $profession=$data['profession']; } if($type==4) { $group='NULL'; $region='NULL'; $school='NULL'; $class='NULL'; $university='NULL'; $profession='NULL'; $subject=$data['subject']; } } $sql= "INSERT INTO users (level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type, group, region, school, class, ip, subject, ban, university, profession) VALUES ('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age, now(), '$data[phone]', '$email', '$login', '$pwd', '$data[type]', '$data[region]', '$data[school]', '$data[class]', '$ip', '$subject', NULL, '$university', '$profession')"; $result = $db->query($sql) or die(printf("Errorv: %s\n", $db->error)); $id = $db->insert_id(); $md5_id = md5($id); $db->query("update users set md5_id='$md5_id' where id='$id'"); // echo "<h3>Thank You</h3> We received your submission."; 

Каждый раз, когда появляется это сообщение об ошибке «У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с« группа, регион, школа, класс, ip, тема, запрет, университет, профессия) ЦЕННОСТИ в строке 2 "

Пробовал '0', 0 вместо NULL. Нет успеха. Пожалуйста помоги

Изменен код. Все еще нет успеха

 $sql= "INSERT INTO users (level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type, 'group', region, school, class, ip, subject, ban, university, profession) VALUES ('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age', now(), '$data[phone]', '$email', '$login', '$pwd', '$data[type]', '$data[region]', '$data[school]', '$data[class]', '$ip', '$subject', NULL, '$university', '$profession')"; 

Учитывая ваше редактирование, вы неверно указали словосочетание. Вы не можете использовать одинарные кавычки, чтобы превратить зарезервированное слово в «приемлемое» слово, оно должно быть обратным:

 INSERT ....., `group`, ... VALUES .... ^-----^--- note the backticks 

Одиночные кавычки превращают что-то в строку, но вы не можете использовать строку для имени поля.

В будущем, если вы получите синтаксическую ошибку SQL, покажите нам фактический запрос, вызывающий ошибку. Как правило, PHP, который строит запрос, не нужен – мы хотим узнать, о чем жалуется MySQL. Только после того, как мы выясним, какова фактическая проблема, мы можем сказать вам, как изменить код, чтобы исправить эту проблему.

group является зарезервированным словом . переименуйте свое поле или поместите его в backticks (`)

Группа – это ключевое слово, ее нужно обернуть вокруг котировок. Кроме того, на самом деле это не похоже на то, что вы делаете санитацию, если нет, вам следует.

Вы пропустите цитату после $ age. Также вы должны использовать {$ data ['lname']} вместо $ data [lname] в кавычках.

4 вещи,

  1. избегайте ваших значений: mysql_real_escape_string
  2. правильно добавить php vars в строку: sprintf или для обозначения массива используйте фигурные скобки "{$ data ['var']}"
  3. backtick вокруг group (или любое имя поля, чтобы быть уверенным)
  4. Не включайте NULL или NOW () в тики, цитаты и т. Д. (Вы на самом деле все в порядке, просто хотите убедиться, что вы его сохранили)
 <?php $sql= sprintf("INSERT INTO `users` (`level`,`fname`, `mname`, `lname`, `dob`, `age`, `reg_date`, `phone`, `email`, `login`, `pwd`, `type`, `group`, `region`, `school`, `class`, `ip`, `subject`, `ban`, `university`, `profession`) VALUES ('1','%s','%s','%s','%s','%s',now(),'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s', NULL,'%s','%s')", mysql_real_escape_string($data['fname']), mysql_real_escape_string($data['mname']), mysql_real_escape_string($data['lname']), mysql_real_escape_string($dob), mysql_real_escape_string($age), mysql_real_escape_string($data['phone']), mysql_real_escape_string($email), mysql_real_escape_string($login), mysql_real_escape_string($pwd), mysql_real_escape_string($data['type']), mysql_real_escape_string($data['region']), mysql_real_escape_string($data['school']), mysql_real_escape_string($data['class']), mysql_real_escape_string($ip), mysql_real_escape_string($subject), mysql_real_escape_string($university), mysql_real_escape_string($profession));