【问题标题】:how can i capture null values from mssql_result?如何从 mssql_result 捕获空值?
【发布时间】:2013-06-20 18:24:19
【问题描述】:

我正在运行一个查询

$Health = mssql_query("Select 
*
from
Health
where 
HEA_ID = '$HEA_ID'
");

然后在此处捕获其中一个字段:

$HEA_DocsOnFile = mssql_result($Health,0,'HEA_DocsOnFile');

HEA_DocsOnFile 字段是sql server 中的bit

我如何知道HEA_DocsOnFileNULL 还是0

不幸的是,mssql_resultNULL0 返回相同的值!

我也试过了:

$HEA_DocsOnFile = is_null(mssql_result($Health,0,'HEA_DocsOnFile')) ? null : mssql_result($Health,0,'HEA_DocsOnFile');

确保将$HEA_DocsOnFile 设置为null

然后以这种方式检查复选框是否为 0 且 NOT NULL:

<?php if($HEA_DocsOnFile===0)  { echo  'checked="checked"' ; }?>

即使它确实为空(至少正如 sql server 所说),它仍然会检查复选框,认为它是0

更新 根据 marc 的建议,我明确选择了所有列而不是 select *

我做到了:

select
....
 ,[HEA_POLST]
      ,[HEA_MOST]
      ,[HEA_DNR]
      ,isnull(HEA_DocsOnFile,2) HEA_DocsOnFile
from...........

我知道HEA_DocsOnFile 现在是2

但是,在测试时:

<?php if($HEA_DocsOnFile==1)  { echo  'checked="checked"' ; }?>

它实际上会选中该框!

我做错了什么?

我实际上做了一个var_dump($HEA_DocsOnFile);,它返回了int(1)

怎么可能?在sql server中是NULL!!

我什至做到了:

select............
    ,isnull(HEA_DocsOnFile,'2') HEA_DocsOnFile

将类型从int 更改为string,然后执行var_dump 并且它仍然返回 int(1)

【问题讨论】:

    标签: php sql-server null


    【解决方案1】:

    你确定它是一个实际的零吗?记住 php 的松散比较规则:

    php > $x = null;
    php > var_dump($x == 0);     // simple quality test
    bool(true)
    php > var_dump(is_null($x)); // best way to check for nulls
    bool(true)
    php > var_dump($x === 0);    // strict equality test
    bool(false)
    php > var_dump($x === null);
    bool(true)
    php > var_dump($x == null);
    bool(true)
    php >
    

    【讨论】:

    • 谢谢!这是我如何检查一个复选框,如果它是 0 而不是 null if($HEA_DocsOnFile==0 && !(is_null($HEA_DocsOnFile)) { echo 'checked="checked"' ; }?>
    • 您正在检查数据库中的字段值是否为假的复选框?似乎有点倒退。
    • 哈哈。有一个 YES 和一个 NO 复选框,我现在正在处理 NO 复选框。如果数据库具有 NULL 值,我不希望选中 NO 复选框
    • 最好使用单选按钮来选择是/否,但这取决于您。基本上你会想要if ($bitfield === 1) { checked } 用于YES 框,if ($bitfield === 0) { checked } 用于NO 框。如果字段为空,则不要检查任何内容,因为数据库上下文中的空对应于“未知”。选中任何一个框都是不正确的,因为您根本不知道该 null 是“真”还是“假”。
    • 我想保留复选框,因为我希望用户能够不检查任何内容(如果他们错误地选择了单选按钮,这将是不可能的)
    【解决方案2】:

    我决定减少损失,只是将那个烦人的字段的架构从 bit 更改为 tinyint

    【讨论】:

      【解决方案3】:

      试试:

      ISNULL ( HEA_DocsOnFile , NULL )
      

      【讨论】:

        猜你喜欢
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        • 2019-06-15
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        相关资源
        最近更新 更多