却不能匹配 NULL 纪录。在某些时候,这种区别会造成一些意想不到的后果。就我的经验
而言,任何字段都应该声明为 NOT NULL
。这样下面的 SELECT 查询语句就能够正常运
转了:
if (!$CITY) {$CITY = "%";}
$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = '
兄 '
AND LAST_NAME = '
第连 '
AND CITY LIKE '$CITY'
");
在第一行中,如果用户没有指定一个 CITY
值,那么就会用通配符 %
来代入 CITY 变量,
这样搜索时就会把任何的 CITY
值都考虑进去,甚至包括那些 CITY
字段为空的纪录。
但是如果有一些纪录,它的 CITY
字段值是 NULL ,这时问题就出现了。上面的查询是不
能够找到这些字段的。问题的一个解决办法可以是这样:
if (!$CITY) { $CITY = "%"; }
$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = ' 兄'
AND LAST_NAME = ' 第连'
AND (CITY LIKE '$CITY' OR CITY IS NULL)
");
注意在搜索 NULL
“
时,必须用 IS ”
关键字,而 LIKE
时不会正常工作的。
在最后要提到的是,如果你在加入或者修改一个新的字段之前,数据库中已经有了一些
记录了,这时新加入的字段在原来的纪录中的值,可能是 NULL ,也可能为空。这也算
是 MySQL
的一个 Bug
吧,所以在这种情况下,使用 SELECT 查询要特别的小心。