Почему запрос работает из PHP, но не из консоли?

Всем привет.

С MySQL не работал уже лет 10, все с PostgreSQL, но тут попросили подшаманить один скрипт и в нем, кроме всего прочего, обнаружилась одна странность. Запрос без ошибок отрабатывает из скрипта, но выдает ошибку, если выполнить из консоли.

Вот, собственно, сам запрос:
UPDATE products
SET price = '750/850'
WHERE id = 5173;


Вот часть вывода из describe products
...
| price          | double(10,3) | YES  |     | NULL    |                             |
...


Из консоли запрос, справедливо, на мой взгляд, падает с ошибкой: "Data truncated for column 'price' at row 1"
Но из php он выполняется без ошибок и устанавливает цену в 750.

Подключение к БД выполняется через mysqli_connect, запрос выполняется через mysqli_query.

PHP: 5.6.30 (fpm)
Mysql: 5.6.34

Вывел полный лог MYSQL запросов, беру запрос (на который mysqli_query вернул true), копирую его в консоль и получаю ошибку.

Прошу помощи :)

P.S. За запись строки в double просьба не пинать, не я автор скрипта, я его только рефакторю и это все будет меняться. Просто очень заинтересовало такое поведение.

Заранее спасибо
  • Вопрос задан
  • 757 просмотров
Решения вопроса 1
@Nc_Soft
Сравните из консоли и из пхп
show variables like '%mode%'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
XXXXPro
@XXXXPro
Fullstack Web developer
Это из-за так называемого strict mode, включающего ряд дополнительных проверок, в том числе невозможность записи строки в double. В консоли он по умолчанию включен, в PHP — выключен.
Чтобы его отключить, нужно сделать запрос
SET SESSION sql_mode = '';
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы