2016-10-09 2 views
1

Я использую подготовленную инструкцию PDO для вставки значений. Одним из значений является дата, и иногда она может быть пустой. В схеме MySQL столбцу даты задано значение NULL.Как вставить пустую строку в столбец даты с помощью PDO?

Предположим, дата date_column является датой и позволяет использовать NULL. Когда я делаю это:

$query = "INSERT INTO tbl(date_column) VALUES(?)"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(['']); 

Это дает мне эту ошибку:

SQLSTATE [22007]: Неверный формат даты и времени: 1292 Некорректное значение даты: '' для столбца 'date_column' в строке 1

В phpMyAdmin я могу выполнить этот запрос без ошибок. Она устанавливает дату в 0000-00-00

INSERT INTO tbl(date_column) VALUES('') 

не то, что тот же самый запрос, который выполняется с помощью PDO за кулисами в примере кода выше? Что не так?

Все, что я хочу, это возможность вставить пустую строку '' в качестве даты без ошибок. Меня не волнует, если он установлен в 0000-00-00

+0

Если строка пуста - не вставляйте ее. –

+0

@u_mulder запрос, приведенный выше, является лишь примером. фактический запрос, с которым у меня возникают проблемы с вставкой многих значений. – marmita

ответ

0

пустая строка не является пустой ... NULL является нулевым

$stmt->execute([null]); 
1

Это слишком долго для комментария.

Это фундаментальная проблема:

All I want is to be able to insert empty string '' as a date.

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

Итак, ваш код должен выглядеть следующим образом:

INSERT INTO tbl(date_column) 
    VALUES(NULL) 

или:

INSERT INTO tbl(date_column) 
    VALUES(DEFAULT) 

Тот факт, что MySQL делает лучше типа проверки на подготовленных запросов с параметрами на самом деле хорошая вещь.

+0

Но почему MySQL позволяет мне вставлять пустую строку '' в столбец даты, а дата становится 0000-00-00. Я хочу сделать это через подготовленный PDO-оператор и вставить '', и MySQL должен просто относиться к нему обычно, не вызывая ошибки. – marmita

+0

@marmita. , , Проблема заключается в том, что '' '' преобразуется в дату. Для строки, закодированной в запросе, это может произойти на этапе компиляции. Для строки, переданной в качестве параметра, фаза компиляции прошла, и механизм выполнения видит строку, в которой он ожидает дату. Как я уже сказал, основная проблема заключается в том, что вы хотите присвоить пустую строку * столбцу * 'date' *. –

+1

Я думаю, что проблема связана с PDO. Поскольку метод execute() обрабатывает все параметры как строки. И он не жалуется, если дата является строкой, если она находится в правильном формате. Он только жалуется, когда строка пуста. – marmita

Смежные вопросы