Строковые значения MySQL для типов tinyint - построен PHP PDO

В проекте у меня есть следующий запрос mySql:

INSERT INTO my_table (status) VALUES ('')

где 'status' имеет тип tinyint (1). Проект развернут на нескольких разных серверах с разными версиями PHP и версиями mySql. Теперь - впервые - у нас возникла проблема, заключающаяся в том, что на новом сервере указанный выше запрос приведет к ошибке.

Incorrect integer value: '' for column 'status' at row 1

Изменение запроса на

INSERT INTO my_table (status) VALUES ('0')

решает проблему. Однако было бы сложно пройти через весь проект и повсюду менять этот тип запроса. Запрос строится PDO с

$stmt = $db->prepare("INSERT INTO my_table (status) VALUES (:status)");
$stmt->execute( array( ':status' => false ) );

или новый стиль

$stmt->execute( array( ':status' => '0' ) );

Есть ли способ указать PDO вести себя по-другому, когда передается false, или мы можем установить какие-либо параметры для БД, чтобы по-разному обрабатывать пустые строки при получении их для int-вводов? Любые идеи очень приветствуются :-)

Кроме того, было бы очень интересно узнать, какая версия MySQL (или PDO?) Является первой, которая может вызвать эту проблему?

'0' по-прежнему остается строкой. Почему бы вам не изменить его на 0 («истинное» число), если вы уже меняете его?
sticky bit 15.06.2018 13:42

@stickybit вы правы. Это не должна быть строка ...

user3440145 15.06.2018 13:44

Отключение строгого режима MySQL май позволяет вам сохранять пустое значение в поле tinyint, но именно поэтому лучше всего разрабатывать с включенным строгим режимом.

Devon 15.06.2018 13:44

@Devon хм ... как я уже сказал: у нас пока не было проблем с этим типом запросов (до сих пор). Таким образом, некоторые настройки по умолчанию (или последствия устаревшей версии), похоже, позволяют это регулярно ...

user3440145 15.06.2018 13:46

@ user3440145 а вы смотрели в строгий режим, как я сказал?

Devon 15.06.2018 13:48

@Devon Я не могу в этом случае. Мне пришлось бы изменить настройку на сервере клиентов - здесь это не вариант. Также было бы неприемлемо в будущем отключить строгий режим в качестве требования.

user3440145 15.06.2018 13:52

@ user3440145 Тогда не знаю, чего вы хотите. Вы сказали, что вам нужно решение, позволяющее избежать обновления кода, которое, вероятно, отключило бы строгий режим. Если вы не хотите отключать строгий режим, вам необходимо обновить код для обработки строгого режима. Не думаю, что на этот вопрос есть ответ.

Devon 15.06.2018 13:55

@Devon, спасибо - это мог быть ответ, который я искал :-) Странно, что эта проблема не возникала до сих пор. И не могу себе представить, что ВСЕ БД отключили строгий режим, кто использовал приложение (я не могу это проверить, но это кажется почти невозможным). Так что если изменить код - единственный вариант - мне придется это сделать.

user3440145 15.06.2018 13:57

Возможно, стоит проверить, может ли это вызвать PDO::ATTR_EMULATE_PREPARES.

Dormilich 15.06.2018 16:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
464
0

Другие вопросы по теме