【发布时间】: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_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 且 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