Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将MSSQL存储过程中的空字符串转换为空字符串_Php_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

PHP将MSSQL存储过程中的空字符串转换为空字符串

PHP将MSSQL存储过程中的空字符串转换为空字符串,php,sql,sql-server,sql-server-2008,Php,Sql,Sql Server,Sql Server 2008,简化示例 这在存储过程中 select coalesce('(' + phone + ') ', '(' + number + ') ' from example_table 所以,若phone不为NULL,我将返回(phone),否则我将返回(number) 这是因为MSSQL被配置为CONCAT_NULL_YIELDS_NULL,基本上如果CONCAT中有NULL,那么所有内容都将变为NULL 当我从客户端(SQLPro)运行它时,它会按预期工作 当我从PHP代码调用这个SP时,只有当ph

简化示例 这在存储过程中

select coalesce('(' + phone + ') ', '(' + number + ') '
from example_table
所以,若phone不为NULL,我将返回(phone),否则我将返回(number)

这是因为MSSQL被配置为CONCAT_NULL_YIELDS_NULL,基本上如果CONCAT中有NULL,那么所有内容都将变为NULL

当我从客户端(SQLPro)运行它时,它会按预期工作

当我从PHP代码调用这个SP时,只有当phone的值为NULL时,我才得到这个()括号,并且读取它时,PHP似乎将NULL转换为空字符串


有人知道如何避开这个问题吗?可能php.ini中的配置会强制php将空值视为特殊值NULL,而不是将其转换为空字符串?

只需将表达式更改为不依赖于配置的内容:

select '(' + coalesce(phone, number) + ') '
from example_table;
如果有更复杂的表达式,则可能需要使用显式的
大小写

select (case when phone is not null then '(' + phone + ') '
             else '(' + number + ') '
        end)

当然,第一个版本更简单,但这可能更具普遍性。

这是有道理的。不幸的是,这是一个正在迁移到AWS的遗留系统,因此需要更改几十个存储过程。然而,经过进一步的调查,我发现了这个问题,结果证明PHP与此无关。事实证明,新DB的CONCAT_NULL_YIELDS_NULL默认为on,这与预期一致,但随后该属性被AWS覆盖并关闭。