我尝试仅在当前行为空时显示表单。当前数据库中的行不为空。它有一个日期.. 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 语句也有效,已经测试过。我觉得这与空和数据库中的数据是日期有关。 2016年2月10日
最佳答案
您需要使用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
循环内。
重要提示:确保该列没有默认值。如果该默认值为
0
或NULL
或其他,那么这可能会影响您的查询,并且永远不会被视为空。另一个要检查的问题是您的 UPDATE 是否没有引入任何空格。如果该列包含空格,则也将被视为“非空”。这也是经过测试的事实。
编辑:
测试后,您的查询可能会失败,因为您使用 SELECT *
选择所有列,而不是 giventoatpdate
列本身。
这是因为还有其他列不为空。
因此,您可能只需要在查询中选择列本身:
SELECT giventoatpdate FROM orders
但是,请确保您选择了正确的列。
注意我刚刚用SELECT *
做了另一次测试,它也有效,所以你可以忽略我的上述理论,但不能完全将其排除在外。
关于php EMPTY 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35160836/