我在PHP中使用if语句,如果查询为空,则不会有效地运行PHP隐藏网页的那一部分。这是我正在使用的if语句
if(!empty($result4)){
}
当用于从整个结果中隐藏单个空行时,它在其他地方工作正常但是当运行整个查询时它不起作用。
这是整个php代码下面的所有内容if(!empty($ result4)){如果查询为空,则不应该发生,但它是。
<?php
if(!empty($result4)){
printf('<h2>%s News' . PHP_EOL, $row['name']);
$sLastStory = '';
foreach ($result4 AS $row4)
{
$sStory = $row4['headline'] . $row4['story'];
if (strcasecmp($sStory, $sLastStory) != 0)
{
if (!empty($sLastStory))
{
}
$sLastStory = $sStory;
printf('<h3>%s</h3>' . PHP_EOL, $row4['headline']);
printf('<h4>%s</h4>' . PHP_EOL, $row4['Displaydate']);
printf('<p>%s</p>' . PHP_EOL, $row4['story']);
}
if(!empty($row4['url'])){
printf('
<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s - Credit - %s" >
<img src="/images/%s%s-thumb.jpg" style="max-height: 230px; max-width: 230px" alt="%s"/></a>' . PHP_EOL, $row4
['url'], $row4['alt'], $row4['headline'], $row4['description'],$row4['credit'], $row4['url'], $row4['alt'],
$row4['alt'] );
}
}
printf('
<br>
<hr>
<a class="bloglink" href="parknews.php?park_id=%s">See all %s news</a></li>' . PHP_EOL, $park_id, $row
['name']);
}
?>
任何想法如何使其发挥作用?
如果这有助于这是MySQL查询:
$park_id = $_GET['park_id'];
$query4= 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS Displaydate, url, alt, description, credit
FROM tpf_news
LEFT JOIN tpf_images ON tpf_news.news_id = tpf_images.news_id
Where tpf_news.park_id = ' . $park_id .' ORDER BY date DESC';
$result4 = $pdo->query($query4);
由于
答案 0 :(得分:3)
如果查询成功,即使未选择任何行,PDO::query()
也会返回PDOStatement
。由于$result4
包含PDOStatement
,因此它不为空。
检查返回行数的更好方法是PDOStatement::rowcount:
if( $result4->rowCount() ){
答案 1 :(得分:1)
如果没有匹配的行,查询结果将永远不会为空。它可以为null或具有其他任何内容,因此您的条件if(!empty($result4))
将永远不会满足。您应该检查num_rows
返回
if($result4->rowCount() > 0)
答案 2 :(得分:1)
空不应该在这里工作。如果你的sql语句没有返回结果,那么PDO :: query方法仍会返回一个对象:一个PDOStatement。但您可以使用rowCount查看您的语句是否为空。
答案 3 :(得分:1)
empty()
<强>空() 确定变量是否被视为空。如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。
要解决此问题,您需要检查查询返回的行数,因为如果它没有错误,它将返回true
rowCount();
在这里查看
http://php.net/manual/en/pdostatement.rowcount.php
我希望这可以帮助:)
答案 4 :(得分:0)
您究竟对empty()
函数有何了解?我想你认为它应该告诉你查询是否有任何结果。这不是它的作用。
如果变量(在这种情况下为empty()
)为$result4
或包含其他一些“空”值,null
的作用将返回true。
记录集对象不是“空”值,无论它获得了多少记录。
您可能想要使用的是
if($result4->rowCount() > 0)
请参阅PDOStatement::rowCount
的PHP手册。
empty()
仅在此处有用 - 例如无效查询或数据库连接中断。在这种情况下,$result4
将是null
。但是你也会遇到PDO错误,而不是检查记录集对象是否为空。
希望有所帮助。
答案 5 :(得分:0)
试试这个
if (is_array($result4) && sizeof($result4)>0) {
// your code here!
}
或
$query4 = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") '
. ' AS Displaydate, url, alt, description, credit '
. ' FROM tpf_news '
. ' LEFT JOIN tpf_images '
. ' ON tpf_news.news_id = tpf_images.news_id '
. ' Where tpf_news.park_id = ? '
. 'ORDER BY date DESC';
$st = $pdo->prepare($query4);
// The following code can be placed in a loop
$st->execute(array($_GET['park_id']));
if ($st->rowCount()>0) {
$aResult = $st->fetch();
// your code
}
马科斯