php EMPTY无法正常工作

时间:2016-02-02 18:11:27

标签: php mysql

我正在尝试仅在当前行为空时显示表单。目前我的数据库中的行不为空。它有一个日期.. 2/10/16虽然它被设置为VARCHAR。无论如何,当我使用以下..它仍然显示我的形式,即使它不应该因为行不是空的..

以下是代码

order = $_GET['uid'];
$stmt=$this->db->prepare("SELECT * FROM orders WHERE order_num = :order");
$stmt->execute(array(":order"=>$order));
$row=$stmt->fetch(PDO::FETCH_ASSOC);

if (empty($row['giventoatpdate'])) {
    echo 
    "
    <form name='atpdate' method='POST'>
    Date Sent to clown?
    <br>
    <input type='text' name='update'>
    <br>
    <input type='submit' name='giventoatpdate'>
    </form>
    ";
}

所有变量名称都正确且拼写正确。

select语句正在运行,已经测试..我觉得它与空有关,而数据库中的数据是日期。 16年2月10日

1 个答案:

答案 0 :(得分:2)

您需要使用while循环:

while($row=$stmt->fetch(PDO::FETCH_ASSOC)){

    if (empty($row['giventoatpdate'])){
    ...
    }
    else{
    ...
    }

}

并确保那些空行(如果为空......)确实是空的。

另外,正如Luke在评论中所说,不同的PHP版本可以empty()不同。

if ($row['giventoatpdate'] == ''){...}

或其他替代方案:

if ($row['giventoatpdate'] != ''){...} // using a negation instead

并在while循环内部。

  • 重要提示:确保您没有该列的默认值。如果该默认值为0NULL或其他,则可能会影响您的查询,并且永远不会被视为空。

  • 另一个需要检查的是,你的UPDATE是否没有引入任何空格。如果所述列包含空格,那么这也将被视为&#34;不是空的&#34;。这也是测试时的事实。

修改

经过测试,您的查询可能会失败,因为您选择的所有列都使用SELECT *而不是giventoatpdate列本身。

这是因为其他列不是空的。

因此,您可能只需要在查询中选择列本身:

SELECT giventoatpdate FROM orders

但是,请确保选择了正确的列。

N.B。我刚刚用SELECT *做了另一次测试,它也有效,所以你可以抓住我的上述理论,但并不完全不考虑它。