使用MySQL检查空字段

我写了一个查询来检查有特定标准的用户,一个是他们有一个电子邮件地址。

我们的网站将允许用户有或没有电子邮件地址。

$aUsers=$this->readToArray(' SELECT `userID` FROM `users` WHERE `userID` IN(SELECT `userID` FROM `users_indvSettings` WHERE `indvSettingID`=5 AND `optionID`='.$time.') AND `email`!="" '); 

这是检查SQL中的空字段的最好方法吗? 我刚刚尝试过“不是空”,这仍然返回一个用户logging没有他们有一个电子邮件地址。

上面的查询工作,但出于好奇,我想知道如果我正确的做法。

一个空字段可以是一个空string或NULL

要处理这两个,使用:

 email > '' 

如果您的表中有很多空的电子邮件logging(这两种types),可以从range访问中受益。

是的,你在做什么是正确的。 您正在检查以确保电子邮件字段不是空string。 NULL表示数据丢失。 空string""是长度为0的空string。

您也可以添加空检查

 AND (email != "" OR email IS NOT NULL) 

你可以使用

 TRIM(IFNULL(email, '')) > '' 

这将工作,但仍有可能返回空logging。 虽然在插入logging时,您可能会将电子邮件地址设置为长度为零的string,但仍可能需要处理以某种方式进入系统的NULL电子邮件地址的情况。

  $aUsers=$this->readToArray(' SELECT `userID` FROM `users` WHERE `userID` IN(SELECT `userID` FROM `users_indvSettings` WHERE `indvSettingID`=5 AND `optionID`='.$time.') AND `email` != "" AND `email` IS NOT NULL '); 

空string(email!=“”)和NULL是有区别的。 NULL为空,空string是一些东西。

如果你想查找所有不为NULL的logging,并且要么是空的,要么有任意数量的空格,这将起作用:

 LIKE '%\ ' 

确保反斜杠后有一个空格。 更多信息: http : //dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

检查这个代码的问题:

 $sql = "SELECT * FROM tablename WHERE condition"; $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)) { foreach($row as $key => $field) { echo "<br>"; if(empty($row[$key])){ echo $key." : empty field :"."<br>"; }else{ echo $key." =" . $field."<br>"; } } }