Здравствуйте, товарищи. У меня тут какая-то магия.
Tl;dr:
Один и тот же SQL-запрос, выполняемый через php вставляет в таблицу не все заданные поля, тогда как ОН ЖЕ, выполненный через консольный mysql-клиент вставляет все поля.
Ситуация:
1) Есть таблица в Mysql следующей конструкции:
CREATE TABLE `af_prices_items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`list_id` int(11) NOT NULL,
`f_name` varchar(255) NOT NULL,
`f_art` varchar(255) NOT NULL,
`f_category` varchar(255) NOT NULL,
`f_width` varchar(255) NOT NULL,
`f_height` varchar(255) NOT NULL,
`f_frame` varchar(255) NOT NULL,
`s_name` varchar(255) NOT NULL,
`s_art` varchar(255) NOT NULL,
`s_width` int(11) NOT NULL,
`s_height` int(11) NOT NULL,
`price` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO af_prices_items
(`list_id`,`f_width`,`f_height`,`f_frame`,`price`,`s_width`,`s_height`)
VALUES
(201,'45','140','0','1450','45','140')
Array
(
[id] => 2314
[list_id] => 201
[f_name] =>
[f_art] =>
[f_category] =>
[f_width] => 45
[f_height] => 140
[f_frame] => 0
[s_name] =>
[s_art] =>
[s_width] => 45
[s_height] => 140
[price] => 0.00
)
Проблема: Как можно заметить, в поле price записывается ноль.
При этом, если выполнить ЭТОТ ЖЕ запрос в adminer'е (аналог PhpMyAdmin), или из консольного mysql-клиента то ВСЁ РАБОТАЕТ, цена вставляется именно такая какая должна быть, а не ноль.
Что я пробовал:
1. Выполнял запрос разными способами:
Способ первый, топорный
mysql_query($sql);
$pdo = new PDO("mysql:host=" . MYSQL_SERV . ";dbname=" . MYSQL_DB, MYSQL_LOGIN, MYSQL_PASS);
$pdo->exec($sql);
В переменной $sql при этом просто указан тот самый запрос что я привёл выше.
2. Также, я пробовал делать запрос не в виде INSERT ... (fields) VALUES (values), а в виде INSERT ... field1=value1, field2=value2 и т.д., опять же без результата.
3. Я обновил систему и до максимума и перезагрузил машину, не помогло. Кстати вот конфигурация:
Система: Debian Wheezy x64
Ядро: 3.2.0-4-amd64
Mysql: mysql Ver 14.14 Distrib 5.5.46, for debian-linux-gnu (x86_64) using readline 6.2
Php: PHP 5.4.45-0+deb7u2 в виде модуля для Apache
Apache: 2.2.22
4. Ещё, пробовал менять тип данных у поля price в таблице на bigint, integer, float, varchar(255), без результата :(
5. Проверял свободное место на диске (всё окей), сообщения в dmesg (всё окей), сообщения в /var/log/mysql и /var/log/apache (всё окей).
6. Пробовал гуглить, но либо я один такой, либо просто не смог грамотно сформулировать вопрос на английском (по «PHP INSERT not inserting all the fields into database» ничего путного не нашел)
7. Да, пробовал менять движок таблицы с MyISAM на InnoDB (MyIsam там был исторически) - не помогло.
8. Попробовал создать копию таблицы с другим именем, и вставлять данные в неё - не помогло.
Я не жду что вы решите проблему, так как у меня самого её не было ещё неделю назад, а сейчас, без каких-либо изменений в коде она вдруг появилась. Поэтому, думаю, что даже я сам с трудом смогу её повторить где-то ещё.
Просто подскажите, что ещё можно проверить, и куда копнуть.
Заранее спасибо :)