php 使用MySQL检查空字段

zqdjd7g9  于 2023-03-07  发布在  PHP
关注(0)|答案(8)|浏览(468)

我编写了一个查询来检查符合特定条件的用户,其中一个条件是他们有电子邮件地址。
我们的网站将允许用户拥有或不拥有电子邮件地址。

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

这是在SQL中检查空字段的最佳方法吗?我刚刚尝试了“IS NOT NULL”,但仍然返回了一个没有电子邮件地址的用户记录。
上面的查询是有效的,但是出于好奇,我想知道我的方法是否正确。

oewdyzsn

oewdyzsn1#

空字段可以是空字符串或NULL
要同时处理这两个问题,请用途:

email > ''

如果您的表中有很多空的email记录(两种类型),那么它可以从range访问中受益。

fwzugrvs

fwzugrvs2#

是的,您所做的是正确的。您正在检查以确保email字段不是空字符串。NULL表示数据丢失。空字符串""是长度为0的空字符串。
您还可以添加空值检查

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

brccelvz3#

你可以用

IFNULL(email, '') > ''
fkvaft9z

fkvaft9z4#

空字符串(email!=“”)和NULL是有区别的。NULL是空的,而空字符串是有意义的。

vulvrdjw

vulvrdjw5#

这是可行的,但仍有可能返回一个空记录。虽然您可能在插入记录时将电子邮件地址设置为长度为零的字符串,但您可能仍希望以某种方式处理空电子邮件地址进入系统的情况。

$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
     ');
jslywgbw

jslywgbw6#

如果你想找到所有不是NULL的记录,或者是空的或者是任意数量的空格,这将是可行的:

LIKE '%\ '

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

aemubtdh

aemubtdh7#

WHERE TRIM(COALESCE(MyCol, '')) = ''

查询将返回MyCol为空或为任意长度空格的行
有关详细信息,请参见TRIMCOALESCE和IS NULL。
还有MySQL文档中的Working with null

bpzcxfmw

bpzcxfmw8#

检查此代码是否有问题:

$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>";     

        }
    }
}

相关问题