Упрощенный пример Это в хранимой процедуреPHP преобразует NULL для пустых строк в MSSQL хранимых процедур
select coalesce('(' + phone + ') ', '(' + number + ') '
from example_table
так, если телефон не NULL я вернусь (телефон) еще вернусь (номер).
Причина этого в том, что MSSQL сконфигурирован как CONCAT_NULL_YIELDS_NULL, в основном, если в concat есть NULL, все становится NULL.
Это работает, как ожидалось, когда я запускаю его от клиента (SQLPro)
Когда я вызываю эту SP из PHP кода я получаю это() скобки только тогда, когда значение телефона NULL и чтение вокруг него, кажется, что PHP переводит NULL в пустую строку.
Кто-нибудь знает, как обойти это? Может быть, конфигурация в php.ini заставит PHP обрабатывать значения NULL как специальное значение NULL вместо перевода их в пустые строки?
Это имеет смысл. К сожалению, это была устаревшая система, которая переносится в AWS, поэтому потребовалось бы изменить десятки хранимых процедур. Однако после некоторого дальнейшего расследования я выяснил проблему, и, оказывается, PHP не имеет к этому никакого отношения. Оказывается, что новая БД имела CONCAT_NULL_YIELDS_NULL по умолчанию, как ожидалось, но затем свойство было переопределено AWS и выключено. – Biondo