我正在尝试仅在当前行为空时显示表单。目前我的数据库中的行不为空。它有一个日期.. 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日
答案 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
循环内部。
重要提示:确保您没有该列的默认值。如果该默认值为0
或NULL
或其他,则可能会影响您的查询,并且永远不会被视为空。
另一个需要检查的是,你的UPDATE是否没有引入任何空格。如果所述列包含空格,那么这也将被视为&#34;不是空的&#34;。这也是测试时的事实。
修改强>
经过测试,您的查询可能会失败,因为您选择的所有列都使用SELECT *
而不是giventoatpdate
列本身。
这是因为其他列不是空的。
因此,您可能只需要在查询中选择列本身:
SELECT giventoatpdate FROM orders
但是,请确保选择了正确的列。
N.B。我刚刚用SELECT *
做了另一次测试,它也有效,所以你可以抓住我的上述理论,但并不完全不考虑它。