Синтаксическая ошибка MySQL. Не могу решить это - PullRequest
0 голосов
/ 30 августа 2011

Я хочу вставить 0 в некоторые поля таблицы БД, но не могу заставить его работать.Кусок кода из моего 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')";

Ответы [ 5 ]

4 голосов
/ 30 августа 2011

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

2 голосов
/ 30 августа 2011

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

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

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

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

2 голосов
/ 30 августа 2011

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

2 голосов
/ 30 августа 2011

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

0 голосов
/ 30 августа 2011

4 вещи,

  1. экранирование ваших значений: mysql_real_escape_string
  2. правильное добавление php vars в строку: sprintf или для обозначения массива используйте фигурные скобки "{$ data ['var']} "
  3. обратная пометка около group (или каждое имя поля обязательно)
  4. Не заключайте NULL или NOW () в тики, кавычки и т. Д. (С вами все в порядке)на этом, просто хотел убедиться, что вы сохранили это)

</p> <pre><code><?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));

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