1

我正在运行查询

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

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

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

该字段HEA_DocsOnFile是一个bitsql server

我怎么知道HEA_DocsOnFile是 aNULL还是 a 0

不幸的是,mssql_result返回相同的值NULL0

我也试过:

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

确保设置$HEA_DocsOnFilenull

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

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

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

根据马克的建议更新 ,我明确选择了所有列而不是做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

将类型从更改intstring,然后做了一个var_dump,它仍然返回 int(1)

4

3 回答 3

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 >
于 2013-06-20T18:28:18.890 回答
0

我决定减少损失,只是将那个烦人的领域的模式从 更改bittinyint

于 2013-06-20T20:11:01.767 回答
-1

尝试:

ISNULL ( HEA_DocsOnFile , NULL )
于 2013-06-20T18:30:06.617 回答