MySQL, как вводить нулевые даты
У меня возникли проблемы с введением нулевых значений в поля даты в таблицу MySQL.
Вот запрос вставки:
$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ("'.$string1.'", "'.$string2.'", '.$date1.', '.$date2.')';
Столбцы s1 и s2 принимают строковые значения, а d1 и d2 принимают даты. Когда я запускаю этот запрос только с полями строки, проблем нет.
Значения даты могут быть либо заданными, либо нулевыми, поэтому я не включил кавычки в запрос, а вместо этого добавил их к переменной ранее. Это код php, который я использую для установки значений даты:
if (empty($date1)){
$date1 = NULL;
}
else{
$date1part = explode("/",$date1);
$date1 = '"'.$date1part[2].'/'.$date1part[1].'/'.$date1part[0].'"';
}
Когда все значения даты установлены, запись вставлена правильно. Однако, когда любая из дат равна нулю, ничего не вставлено.
Почему я не могу просто вставить нулевые значения в MySQL?
Ответы
Ответ 1
Попробуйте следующее:
$query = "INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ('$string1', '$string2', " . ($date1==NULL ? "NULL" : "'$date1'") . ", " . ($date2==NULL ? "NULL" : "'$date2'") . ");";
так, например, если вы поместите это в запрос:
$string1 = "s1";
$string2 = "s2";
$date1 = NULL;
$date2 = NULL;
результат должен быть:
INSERT INTO table (column_s1, column_s2, column_d1, column_d2) VALUES ('s1', 's2', NULL, NULL);
Ответ 2
Вы должны сначала преобразовать нулевую переменную в строку NULL
Вот так:
if(is_null($date1)){
$date1 = 'NULL';
}
Если вы используете столбец даты MySQL, вы также должны указать, что он должен содержать null при его создании, например:
CREATE TABLE `table` (
id INT NOT NULL AUTO_INCREMENT,
date DATE NULL DEFAULT NULL,
PRIMARY KEY(id)
)
Также очень важно выполнить запрос с привязанными параметрами, например, используя pdo
Что-то вроде этого:
$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
$stmt->execute(array($string1,$string2,$date1,$date2));
Ответ 3
Обратная косая черта N - это еще один способ выражения NULL в MySQL.
Попробуйте поместить значение (обратная косая черта N): \N
в один из следующих параметров:
$data1 = "\N";
$sql="insert into tablename set column_s1='" . $data1 .
"', column_s2='" . data2 .
"', column_s3='" . $data3 . "'";
Ссылка: http://dev.mysql.com/doc/refman/5.1/en/load-data.html
Ответ 4
В Derby, если вы хотите вставить значения, кроме тех, которые вы объявили Null (column_d1, column_d2), sql:
INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');
Ответ 5
Вероятно, ответ в данный момент не нужен, но я нашел решение, которое я искал. Используйте Expression
для передачи NULL
следующим образом:
['some_date_to_update' => new Expression('NULL')]
Следовательно, MySQL поймет, чего вы хотите, и сохраните (NULL)
в БД вместо хранения 0-дат. Надеюсь, это поможет кому-то.
Ответ 6
если NULL нет работы, просто укажите дату "0000-00-00"
$chequeDate = "0000-00-00";
Ответ 7
В Mysql DATE
тип данных Default NULL
означает
Некоторая версия установлена как 0000-00-00
Некоторая версия установлена как 1970-01-01