我正在运行查询
$Health = mssql_query("Select
*
from
Health
where
HEA_ID = '$HEA_ID'
");
然后在这里捕获其中一个字段:
$HEA_DocsOnFile = mssql_result($Health,0,'HEA_DocsOnFile');
字段HEA_DocsOnFile
是bit
sql server
我如何知道HEA_DocsOnFile
是NULL
还是0
?
遗憾的是,mssql_result
返回NULL
和0
的相同值!
我也尝试过:
$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)
select............
,isnull(HEA_DocsOnFile,'2') HEA_DocsOnFile
将类型从int
更改为string
,然后执行var_dump
并仍然返回 int(1)
答案 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 )