SQL-запрос не может быть вставлен с тем же количеством столбцов, работает с меньшим количеством вставленных столбцов - PullRequest
0 голосов
/ 15 марта 2011

В приведенном здесь примере значения NULL обычно являются другими переменными, через которые я прохожу.Я попытался передать NULL, чтобы увидеть, была ли это проблема, поскольку это единственные значения, которые могут быть NULL, все остальное требуется

mysql_query("INSERT INTO `imstillr_crm`.`customerinfo` 
            (`id`, `companyname`, `primarycontact`, `primaryemail`, 
             `prefphone`, `secondarycontact`, `secondaryemail`, `optionalphone`, 
             `department`, `website`) 
           VALUES 
             (NULL, '".$company."', '".$primarycontact."', '".$primaryemail."', 
              '".$prefphone."', 'NULL', 'NULL', 'NULL, 
              '".$department."', '".$website."')");

Я только что попробовал это с меньшим количеством переменных, и это сработало.Я немного растерялся.Я даже вставил запись, скопировал строку SQL и добавил свои переменные.

Ответы [ 5 ]

6 голосов
/ 15 марта 2011

Я думаю, что вы допустили ошибку здесь:

'NULL, '".$department.

Предположительно, вы намеревались

'NULL', ".$department."

НО: похоже, вы пытаетесь вставить буквенный текст «NULL» в свою базу данных, что, как я полагаю, не то, что вы намеревались. NULL - это ключевое слово, поэтому вы можете просто использовать пустое слово NULL везде, где вы вставляете нулевое значение (поэтому кавычек вокруг него не требуется).

Более того, рискуя отвлечь вас от текущей проблемы, вы действительно не должны выполнять операторы SQL путем составления строки, как вы это делаете. Вот как успешны атаки SQL-инъекций. Лучше использовать PDO с подготовленными утверждениями. Вот краткое описание того, как его использовать:

http://www.php.net/manual/en/pdo.prepared-statements.php

Основные преимущества:

  1. Вы удалили явную зависимость от Mysql, созданную функциями mysql_ *
  2. Вы можете избежать атак с использованием SQL-инъекций.
  3. Ваш код должен быть легче читать без сложной композиции строк

Просто для полноты, вот как ваш код будет выглядеть с PDO

$stmt = $dbh->prepare("INSERT INTO imstillr_crm.customerinfo (id, companyname, primarycontact, primaryemail, prefphone, secondarycontact, secondaryemail, optionalphone, department, website) VALUES (:id, :companyname, :primarycontact, :primaryemail, :prefphone, :secondarycontact, :secondaryemail, :optionalphone, :department, :website)");
$stmt->bindParam(":id", NULL);
$stmt->bindParam(":companyname", $company);
$stmt->bindParam(":primarycontact", $primarycontact);

...

$stmt->execute();

Обратите внимание, что вам не нужно ставить кавычки вокруг значений. Они могут содержать различные символы, такие как кавычки, точки с запятой и т. Д., И это не вызовет проблем в вашей базе данных (они могут вызвать проблемы в других местах вашего приложения, но это другое обсуждение).

3 голосов
/ 15 марта 2011

Я не думаю, что вы можете поставить NULL в кавычки. Я думаю, что вам нужно удалить кавычки вокруг NULL, иначе MySQL (я полагаю, MySQL) будет рассматривать их как строки.

1 голос
/ 15 марта 2011

A ' отсутствует после последнего NULL Исправленный код:

mysql_query("INSERT INTO `imstillr_crm`.`customerinfo` (`id`, `companyname`, `primarycontact`, `primaryemail`, `prefphone`, `secondarycontact`, `secondaryemail`, `optionalphone`, `department`, `website`) VALUES (NULL, '".$company."', '".$primarycontact."', '".$primaryemail."', '".$prefphone."', 'NULL', 'NULL', 'NULL', '".$department."', '".$website."')");
0 голосов
/ 15 марта 2011

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

0 голосов
/ 15 марта 2011

Вы перепутали ' и ,:

'NULL, '".$department."'

Должно быть:

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