Ошибка MySQL: "ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL для правильного синтаксиса" [закрыто]

Я получаю эту ошибку от MySQL:

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 'Details 
(title, first, last, NRIC, po' at line 1

вот код:

<?php
  $link = mysql_connect("localhost", "root", "");
  if (!$link) { die('Could not connect: ' . mysql_error()); }

  $db_selected = mysql_select_db(Membership, $link);
  if (!$db_selected) { die('Can't use' . Membership . ':' . mysql_error()); }

  $value1 = $_POST["title"];
  $value2 = $_POST["first"];
  $value3 = $_POST["last"];
  $value4 = $_POST["NRIC"];
  $value5 = $_POST["birthdate"];
  $value6 = $_POST["birthmonth"];
  $value7 = $_POST["birthyear"];
  $value8 = $_POST["address"];
  $value9 = $_POST["postal"];
  $value10 = $_POST["genderSelect"];
  $value11 = $_POST["contact"];
  $value12 = $_POST["email"];
  $value13 = $_POST["enter"];
  $value14 = $_POST["password"];
  $value15 = $_POST["Updates"];
  $value16 = $_POST["Terms"];
  $value17 = $_POST["submit_but"];
  $value18 = $_POST["status"];

  $sql = "INSERT INTO Member Details (title, first, last, NRIC, birthdate, birthmonth, birthyear, address, postal, genderSelect, contact, email, enter, password, Updates, Terms, submit_but, status) VALUES ('$value', '$value2', '$value3', '$value4', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '$value13', '$value14', '$value15', '$value16', '$value17', '$value18')";

  if (!mysql_query($sql)){     //The error is thrown here
   die('Error: ' . mysql_error());
  }
  mysql_close();
?>

3 ответов


ваша проблема кроется здесь:

INSERT INTO Member Details ...

потому что у вас есть пространство, он думает Member - это имя таблицы и Details - это посторонние, отсюда и ошибки.

если ваш стол Member Details, вам нужно заключить его в задние тики:

INSERT INTO `Member Details` ...

Я на самом деле не такой большой поклонник пробелов в именах таблиц SQL (или имен файлов файловой системы, если на то пошло). В данном конкретном случае, я полагаю MemberDetails (или Member_Details, member_details и, вероятно, другие) просто как читается, без требуя команда разбросаны по всему коду.


попробуйте отметить ( ` ) для каждого имени поля, чтобы результат мог быть таким

"INSERT INTO `Member Details` (`title`, `first`, `last`, `NRIC`, `birthdate`, `birthmonth`, `birthyear`, `address`, `postal`, `genderSelect`, `contact`, `email`, `enter`, `password`, `Updates`, `Terms`, `submit_but`, `status`) 
VALUES ('$value', '$value2', '$value3', '$value4', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '$value13', '$value14', '$value15', '$value16', '$value17', '$value18')";

синтаксис вставки неверен. Если member-это имя таблицы, оно должно быть примерно следующим

INSERT INTO Member (title, first, last, NRIC, birthdate, birthmonth, birthyear, address, postal, genderSelect, contact, email, enter, password, Updates, Terms, submit_but, status) VALUES ('$value', '$value2', '$value3', '$value4', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '$value13', '$value14', '$value15', '$value16', '$value17', '$value18')