Запретить добавление значения 0000-00-00 в столбцы типа DATE во всех операциях обновления / вставки в уже созданном приложении PHP - PullRequest
0 голосов
/ 17 января 2019

Я работаю над приложением PHP - MySQL, где у меня есть требование преобразовать все сохраненные значения без даты в NULL в столбце DATE и в будущем избегать вставки значений 0000-00-00 в столбец Короче говоря, столбец DATE должен иметь только допустимые значения DATE или NULL. Предположим, у меня есть таблица с типом столбца DATE и значением по умолчанию NULL . Когда я попытался вставить данные в эти столбцы с ненулевым значением, вместо того, чтобы установить значение NULL , столбец будет установлен как '0000-00-00' . Так что если у меня значение даты равно пустая строка или недопустимая строка даты. Я не хочу, чтобы значение '0000-00-00' вставлялось. Я использую библиотеку классов-оболочек MySQLi для соединения приложения PHP с базой данных MySQL. ссылка приведена ниже.

https://github.com/ThingEngineer/PHP-MySQLi-Database-Class

Мне трудно проверять при каждой операции вставки / обновления в приложении, где значение столбца даты действительно является значением даты, и, если нет, отменить для столбца или установить значение столбца значение NULL . Поэтому я попытался что-то сделать в том месте, где команда вставки / обновления используется библиотекой (все команды вставки / обновления проходят через эту библиотеку). Но там также должна быть некоторая предопределенная информация о том, какие таблицы и какие столбцы Тип DATE (вероятно, должен получить метаинформацию таблицы из информационной таблицы схемы) для сравнения и принятия соответствующих мер.

В библиотеке JDBC я уже нашел некоторые похожие функции, например, в теме (см. Ответ с 5 ответами).

https://dba.stackexchange.com/questions/139896/null-instead-0000-00-00-000000-in-mysql-5-7

Итак, есть ли что-то похожее на zeroDateTimeBehaviour = convertTONull опция в драйвере JDBC, которую мы можем использовать в интерфейсе соединения PHP - MYSQL или что-то вроде преобразования на уровне БД.

Я использую PHP 5.6 и MySQL версии 5.6.

Редактировать - Многие указали, что на вопрос уже есть ответ в

MySQL, как вставить нулевые даты

Но все ответы не приводят к правильному решению (по крайней мере, в моем случае), так как многие ответы объясняют, как решать проблему на каждом уровне вставки / обновления, но не тогда, когда приложение уже имеет много команд вставки / обновления и Я хочу изменить текущее приложение с наименьшими усилиями. Я ищу что-то вроде

zeroDateTimeBehaviour = convertTONull опция в драйвере JDBC

1 Ответ

0 голосов
/ 17 января 2019

Попробуйте установить SET GLOBAL sql_mode = '';

Если вам это не поможет, я рекомендую прочитать по ALLOW_INVALID_DATES Полный список режимов SQL . Надеюсь, что это решит вашу проблему.

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