У меня есть проект, который использует MSSQL над pdo_dblib и freetds. Скалярные функции MS всегда возвращали свои данные в этом формате:
array(1) { [0]=> array(1) { ["computed"]=> string(3) "922" } }.
Но теперь, на одном из серверов, формат внезапно выглядит так:
array(1) { [0]=> array(1) { [""]=> string(3) "922" } }.
Таким образом, ключ в массиве стал пустым вместо «вычислено».
Я знаю, что могу изменить этот ключ в моих операторах выбора, добавив предложение «как». Тем не менее, вопрос в том, что контролирует ключ по умолчанию?
Оба сервера используют одну и ту же базу данных.
Насколько я знаю, этот «вычисляемый» ключ добавлен pdo_dblib.
Версия PHP различна на разных серверах: у версии с computed старая версия 5.3, а у версии с пустым ключом версия 5.5. Но я думаю, что у этого сервера было 5.5 уже довольно давно, а вычисленный ключ исчез только вчера. Не уверен на 100%, хотя …
В конце концов я узнал, что это происходит, потому что произошли изменения в этот коммит в pdo_dblib. Мотивация для этого изменения состояла в том, что это забивало память.
Следует отметить, что версия что вы получаете от pecl странно. Он «вычислен» в источнике dblib_stmt.c, но все еще не использует его.
Версия, которая работает, это та, что связана с исходниками php. Мне удалось взять исходники из php-5.3.29 \ ext \ pdo_dblib \ и собрать их с 5.6.4.
Других решений пока нет …