Вставьте значение NULL в поле базы данных с типом char (2) - PullRequest
3 голосов
/ 17 января 2012

Как вставить значение NULL в поле базы данных (MySQL) с помощью char (2)?

До того как я использовал mysql_query и я получил в базе данных следующее значение: NU

Вместо этого значения должно быть NULL.

Прочитав этот вопрос Я перешел на подготовленные высказывания. У меня все еще есть NU в моей базе данных.

Теперь к моему коду. Я читаю строку для строки CSV. Тогда я делаю

    if(empty($data[$c])) {
        $data[$c] = NULL;
    }

Если я получаю эхо $ data [1], я получаю NULL. Затем я делаю свой подготовленный запрос:

$stmt = $connection->prepare("INSERT INTO table (first, second, ..) VALUES (?, ?, ...)");
$stmt->bind_param("ss...", $data[0], $data[1], ...);
$res=$stmt->execute();

Что не так?

Edit:

Согласно Шиплу, я сделал следующее:

Сделайте это без указания последних параметров, которые вызывают NU:

$stmt = $connection->prepare("INSERT INTO employee (first, second, ...) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssssssssssii", $data[0], $data[1], ..., $last);

Использование default:

$stmt = $connection->prepare("INSERT INTO employee (first, second, ..., last) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, default(last))");
$stmt->bind_param("sssssssssssssii", $data[0], $data[1], ...);

Но все тот же результат. Поле char (2) имеет значение по умолчанию = NULL. Как это может быть? Похоже, проблема не в запросе. Я думаю, что самым простым решением будет запрос на обновление ...

Создать таблицу:

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL auto_increment,
  `text` varchar(128) default NULL,
  `no` int(11) default NULL,
  `problemfield` char(2) default NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `text` (`text`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=832 ;

Ответы [ 2 ]

1 голос
/ 17 января 2012

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

mysql> create table t(
    -> n varchar(20),
    -> a char(2),
    -> primary key(`n`)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t (n) values ('myname');
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> select * from t;
+--------+------+
| n      | a    |
+--------+------+
| myname | NULL |
+--------+------+
1 row in set (0.00 sec)

Другой способ - использовать функцию DEFAULT ,Но это только для MySQL .Я не знаю, работает ли он на другом движке СУБД.

mysql> insert into t (a, n) values (default(a), 'myname1');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+---------+------+
| n       | a    |
+---------+------+
| myname  | NULL |
| myname1 | NULL |
+---------+------+
0 голосов
/ 17 января 2012

Я нашел проблему. Я читал CSV-файл. Этот файл был экспортирован с помощью phpmyadmin и содержал NULL строк. Мой чек

if(empty($data[$c])) {
    $data[$c] = NULL;
}

было недостаточно, потому что он никогда не проверял строку NULL. Итак, решение:

if(empty($data[$c]) || $data[$c]=='NULL') {
    $data[$c] = NULL;
}

Значит, Андрей был прав.

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