我怎样才能从mssql_result中捕获空值?

时间:2013-06-20 18:24:20

标签: php sql-server null

我正在运行查询

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

然后在这里捕获其中一个字段:

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

字段HEA_DocsOnFilebit

中的sql server

我如何知道HEA_DocsOnFileNULL还是0

遗憾的是,mssql_result返回NULL0的相同值!

我也尝试过:

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

确保将$HEA_DocsOnFile设置为null

然后检查一个复选框,如果它是0并且这样不是NULL:

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

即使它确实为null(至少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)

3 个答案:

答案 0 :(得分: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 >

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

尝试:

ISNULL ( HEA_DocsOnFile , NULL )