0

我在 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);

谢谢

4

6 回答 6

3

如果查询成功,即使没有选择行,PDO::query()也会返回 a 。PDOStatement由于$result4包含 a PDOStatement,因此它不为空。

检查返回行数的更好方法是PDOStatement::rowcount

if( $result4->rowCount() ){
于 2013-05-21T15:33:51.887 回答
1

查询的结果永远不会为空,即使没有匹配的行也是如此。它可以为 null 或有其他任何内容,因此您的条件if(!empty($result4))将永远不会满足。您应该检查是否已num_rows退回

if($result4->rowCount() > 0)
于 2013-05-21T15:35:19.490 回答
1

空不应该在这里工作。如果你的 sql 语句没有返回结果,PDO::query 方法无论如何都会返回一个对象:一个 PDOStatement。但是您可以使用 rowCount 来查看您的语句是否为空。

于 2013-05-21T15:35:59.183 回答
1

这里可能有很多选择empty()

empty() 确定一个变量是否被认为是空的。如果变量不存在或其值等于 FALSE,则认为该变量为空。如果变量不存在,empty() 不会生成警告。

要克服这个问题,您需要检查从查询返回的行数,因为如果没有错误,它将返回 true

rowCount();

在这里查看

http://php.net/manual/en/pdostatement.rowcount.php

我希望这可以帮助:)

于 2013-05-21T15:37:02.653 回答
0

您到底了解要执行的empty()功能是什么?我猜你认为它应该告诉你查询是否有任何结果。那不是它的作用。

如果empty()变量(在这种情况下$result4)是null或包含一些其他“空”值,则返回 true。

一个记录集对象不是一个“空”值,不管它有多少记录。

对于这种情况,您可能想要使用的是

if($result4->rowCount() > 0)

请参阅 PHP 手册以获取PDOStatement::rowCount.

empty()仅当您预期查询完全失败时才会在此处有用——例如无效查询或断开的数据库连接。在这种情况下,$result4将是null。但是您也会遇到 PDO 错误,您可以使用这些错误来处理它,而不是检查记录集对象是否为空。

希望有帮助。

于 2013-05-21T15:34:45.527 回答
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

}

马科斯

于 2013-05-21T17:21:15.697 回答