Ошибка MYSQL с формой PHP - PullRequest
       3

Ошибка MYSQL с формой PHP

1 голос
/ 04 октября 2011

Это может быть вопрос noob, но я не могу найти ничего плохого в своем коде, и я все еще получаю ошибки MySQL.

Я использую этот код для отправки формы в базу данных MYSQL ->

    if($forename == '' || $surname == '' || $email == '' || $address1 == '' || $address2 == '' || $terms == ''){
        $_SESSION['status'] = 'error';
    } else {
            $sql = "INSERT INTO dbEntry ('forename','surname','email','address1','address2','terms')
            VALUES ('$forename','$surname','$email','$address1','$address2','$terms')" or die(mysql_error());
            $results = mysql_query($sql);

            if ($results) { echo "Details added."; }

            //if (mysql_error()) echo mysql_error();

        $_SESSION['status'] = 'success';
    }

//Print query for debugging ->
echo $sql;

Но выдает эту ошибку ->

INSERT INTO dbEntry («имя», «фамилия», «электронная почта», «адрес1», «адрес2», «условия») ЗНАЧЕНИЯ («asd», «asd», «asd@asd.com», « ASD», 'как', 'NULL')
Ошибка: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с полями «имя», «фамилия», «электронная почта», «адрес1», «адрес2», «термины») ЗНАЧЕНИЯ («asd», «as») в строке 1

Я создал таблицу для этой структуры ->

id INT(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
forename VARCHAR(32) NOT NULL,
surname VARCHAR(32) NOT NULL,
email VARCHAR(64) NOT NULL,
address1 VARCHAR(64) NOT NULL,
address2 VARCHAR(64) NOT NULL,
terms TINYINT(1)

Я не вижу никаких синтаксических ошибок, где я ошибаюсь? Извиняюсь, если я включил слишком много информации.

Приветствия

Ответы [ 5 ]

2 голосов
/ 04 октября 2011

Не заключайте имена столбцов в одинарные кавычки в списке вставляемых столбцов.

INSERT INTO dbEntry (forename,surname,email,address1,address2,terms) VALUES ('asd','asd','asd@asd.com','asd','as','NULL') 

Если имена ваших столбцов являются зарезервированными ключевыми словами MySQL или содержат пробелы, дефисы или другие специальные, но допустимые символы, вы должны заключить их в обратные кавычки:

INSERT INTO tbl (`desc`, `space table`, `etc`)...

Как подсказка, когда MySQL печатает синтаксическую ошибку, 99% времени ошибка возникает в точном символе, где начинается открывающая кавычка right syntax to use near ".

1 голос
/ 04 октября 2011

У вас там происходит несколько странностей ...

$sql = "INSERT INTO dbEntry ('forename','surname','email','address1','address2','terms')
            VALUES ('$forename','$surname','$email','$address1','$address2','$terms')" or die(mysql_error());

На самом деле не имеет смысла - вы присваиваете значение строке и говорите программе умереть (с помощьюmysql_error ()), если строка пуста - die () должен отражать ответ от функции mysql_query () - вы хотите, чтобы он умер, когда эта функция возвращает false.Да, и как указал @Michael - не заключайте имена полей в кавычки (апострофы) - при необходимости используйте обратные метки.

if ($results) { echo "Details added."; }
$_SESSION['status'] = 'success';

Это означает, что вы будете отображать только "Детали добавлены" если запрос выполняется успешно - однако вы присваиваете 'success' для $ _SESSION ['status'], даже если запрос не выполняется.

Я бы попробовал что-то похожее на следующее;Я добавил некоторые escape-коды - на всякий случай, если вы их пропустили :) Так как PHP свободно набирает пустые строки и (int) 0 можно оценить как (bool) false - так что !$forename будет эквивалентно $forename == ''.

$forename = mysql_real_escape_string($forename);
$surname = mysql_real_escape_string($surname);
$email = mysql_real_escape_string($email);
$address1 = mysql_real_escape_string($address1);
$address2 = mysql_real_escape_string($address2);
$terms = (int) $terms;

if(!$forename || !$surname || !$email || !$address1 || !$address2 || !$terms) {
  $_SESSION['status'] = 'error';
}

else {
  $sql = "INSERT INTO dbEntry(forename, surname, email, address1, address2, terms) "
       . "VALUES ('{$forename}', '{$surname}', '{$email}', '{$address1}', '{$address2}', {$terms})";

  $response = mysql_query($sql);
  if(!$response) {
    die(mysql_error());
  }
  else {
    echo "Details added";
    $_SESSION['status'] = 'success';
  }
}
1 голос
/ 04 октября 2011
INSERT INTO dbEntry (forename,surname,email,address1,address2,terms) VALUES ('asd','asd','asd@asd.com','asd','as','NULL')
0 голосов
/ 04 октября 2011

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

$sql = "INSERT INTO (field, field) VALUES = ('". mysql_real_escape_string( $field ) ."', '". mysql_real_escape_string( $field ) ."')";

Также, чтобы исправить ошибки, используйте это в вашей функции запроса:

mysql_query( $sql ) or trigger_error (mysql_error());

Или в зависимости от того, хотите ли вы продолжать выполнение скрипта

mysql_query( $sql ) or die (mysql_error());
0 голосов
/ 04 октября 2011

Похоже, что он пытается вставить строку "NULL" в поле условий, которое является целым числом.

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