【问题标题】:PHP translates NULL to empty strings in MSSQL stored proceduresPHP 将 NULL 转换为 MSSQL 存储过程中的空字符串
【发布时间】:2016-09-29 01:47:15
【问题描述】:

简化示例 这是在存储过程中

select coalesce('(' + phone + ') ', '(' + number + ') '
from example_table

所以如果电话不为 NULL,我会返回(电话),否则我会返回(号码)。

原因是MSSQL被配置为CONCAT_NULL_YIELDS_NULL,基本上如果concat中有NULL一切都变成NULL了。

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

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

有人知道解决这个问题的方法吗?也许 php.ini 中的配置会强制 PHP 将 NULL 值视为特殊值 NULL 而不是将它们转换为空字符串?

【问题讨论】:

    标签: php sql sql-server sql-server-2008


    【解决方案1】:

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

    select '(' + coalesce(phone, number) + ') '
    from example_table;
    

    如果您有更复杂的表达式,那么您可能需要使用显式的case

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

    当然,第一个版本更简单,但这可能更通用。

    【讨论】:

    • 这是有道理的。不幸的是,这是一个正在迁移到 AWS 的遗留系统,因此需要更改数十个存储过程。然而,经过一些进一步的调查,我发现了这个问题,事实证明 PHP 与它无关。事实证明,新数据库的 CONCAT_NULL_YIELDS_NULL 按预期默认为打开,但随后该属性被 AWS 覆盖并关闭。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2017-06-14
    相关资源
    最近更新 更多