PHP如果查询行为不正确

时间:2013-05-21 15:29:46

标签: php mysql

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

由于

6 个答案:

答案 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

}

马科斯