Вообщем, я уже сломал голову. Переношу базу с магазина, претерпевшего многократные обновления, на чистую установку. и тот и другой - 4.3.2.RU. Переношу вручную, только данные. Предварительно привел в полную идентичность по аддонам, статусам, группам, языкам и прочим настройкам. Если таблицы надо перекопировать полностью - копирую используя Supex Dumper.
Но это все преамбула, а загвоздка вот тут:
Переношу товары, копирую все таблицы, начинающиеся с products. И обнаруживаю, что половина характеристик в товарах в новом магазине есть, а половины - нет.
Иду в сами характеристики - половина нормально, а при попытке открыть на редактирование характеристику из тех, что пропали в товарах - вижу:[spoiler]PHP Notice<br />
Message<br />
Undefined index: feature_id<br />
Error at<br />
app/controllers/backend/product_features.php, line: 79<br />
Backtrace<br />
File: app/controllers/backend/product_features.php<br />
Line: 79<br />
Function: {closure}<br />
File: app/functions/fn.control.php<br />
Line: 680<br />
Function: include<br />
File: app/functions/fn.control.php<br />
Line: 451<br />
Function: fn_run_controller<br />
File: artadmin.php<br />
Line: 27<br />
Function: fn_dispatch<br />
PHP Notice<br />
Message<br />
Undefined index: feature_type<br />
Error at<br />
app/controllers/backend/product_features.php, line: 80<br />
Backtrace<br />
File: app/controllers/backend/product_features.php<br />
Line: 80<br />
Function: {closure}<br />
File: app/functions/fn.control.php<br />
Line: 680<br />
Function: include<br />
File: app/functions/fn.control.php<br />
Line: 451<br />
Function: fn_run_controller<br />
File: artadmin.php<br />
Line: 27<br />
Function: fn_dispatch
[/spoiler]
иду в /product_features.php и вижу, что массив $feature - пустой. Смотрю, какая функция его возвращает- fn_get_product_feature_data
иду в эту функцию. Ставлю на вывод формируемый запрос, ставлю на вывод возвращаемый результат, то есть:
<br />
fn_print_r("SELECT " . implode(",", $fields) . " FROM ?:product_features $join WHERE $condition");<br />
$feature_data = db_get_row("SELECT " . implode(",", $fields) . " FROM ?:product_features $join WHERE $condition");<br />
fn_print_r($feature_data);<br />
И в результате получаю:
<br />
SELECT ?:product_features.feature_id,?:product_features.feature_code,?:product_features.company_id,?:product_features.feature_type,?:product_features.parent_id,?:product_features.display_on_product,?:product_features.display_on_catalog,?:product_features.display_on_header,?:product_features_descriptions.description,?:product_features_descriptions.lang_code,?:product_features_descriptions.prefix,?:product_features_descriptions.suffix,?:product_features.categories_path,?:product_features_descriptions.full_description,?:product_features.status,?:product_features.comparison,?:product_features.position FROM ?:product_features LEFT JOIN ?:product_features_descriptions ON ?:product_features_descriptions.feature_id = ?:product_features.feature_id AND ?:product_features_descriptions.lang_code = 'ru' WHERE ?:product_features.feature_id = 38<br />
Array<br />
(<br />
)<br />
НО!
Я иду в phpmyadmin и ввожу непосредственно там этот запрос
и он выполняется и выдает логичный результат! (в прикрепленном файле скриншот)
То есть получается что с запросом, который запросто выполняется и возвращает результат в самой БД - функция db_get_row - не справляется? участвуют тут всего лишь две таблицы, они полностью идентичны в обоих базах. Я бы грешил на них, если бы все характеристики выдавали ошибки, но половина то нормально? Ещё вот. Их 10. id 3,6,8,10,12,13,37,38,39,40
так вот ошибку выдают 13,37,38,39,40 - это хоть какая-то закономерность, смысл которой я ещё не понял. Индексы и автоинкременты в таблицах скопировались правильно.
Вот в чем тут магия?