不为null无法正常工作

时间:2018-04-02 04:01:47

标签: php mysql

我想从列名为非空的表中检索数据。当我使用IS NOT NULL时,它选择所有行。请检查我的代码。

my table is 
------------------------------------------------------
 i_am                  pname                     name
------------------------------------------------------
 cardiologist                                     dbkr
 orthopedician                                    mdv
                       apollo                     mbkr
 pateint                                          charan

现在我想从pname不为空的表中检索数据,并在选择框中显示该列表。所以我正在编写以下代码

<select name="pharmacy" id="pharmacy">
<?php
$sqlPh = "SELECT * FROM users WHERE pname IS NOT NULL";
$mysqlPh = mysqli_query($con,$sqlPh);
//die(mysqli_num_rows($mysqlPh));
while($phData = mysqli_fetch_object($mysqlPh))
{
?>
    <option value="<?php echo $phData->pname;?>"><?php echo $phData->pname;?></option>

<?php
}
?>
</select>

我期待的是

<select>
    <option value="apollo">apollo</option>
</select>

但它给出的是

<select>
    <option></option>
    <option></option>
    <option value="apollo">apollo</option>
    <option></option>
</select>

它也给出了空值。如何只得到空值?

3 个答案:

答案 0 :(得分:2)

我的猜测是,那些在pname列中显示空值的记录实际上没有NULL,而是有空格。如果是这样,您可以使用以下查询解决此问题:

SELECT *
FROM users
WHERE COALESCE(TRIM(pname), '') <> '';

答案 1 :(得分:1)

某些列可能有空白空间而其他列有空白 试试这个

SELECT * FROM `users` WHERE `pname` != ''

这只会获得具有一些数据的值

上面的

会产生你想要的东西,但更准确地使用下面的查询

SELECT * FROM `users` WHERE `pname` IS NOT NULL AND `pname` != ''

这里你得到的数据不是空的而不是空的

答案 2 :(得分:0)

试试这个:

SELECT *
FROM users
WHERE TRIM(pname) <> '';