2013-05-21 152 views
0

我在PHP中使用if语句,如果查询是空的,它不会运行PHP有效地隐藏该网页的该部分。这是if语句我使用PHP如果查询不正确行为

if(!empty($result4)){ 

} 

用于别处时,隐藏的整体结果个体空行,但是当整个查询运行它不起作用,它工作正常。

这是低于整个PHP代码一切,如果(!空($ 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()){ 
+0

这工作完美。这是我的错,我真的很陌生,但现在我知道如何使用rowCount()谢谢 – themeparkfocus

0

你究竟懂什么empty()功能呢?我猜你认为它应该告诉你这个查询是否有结果。这不是它所做的。

如果变量(在本例中为$result4)为null或包含一些其他“空”值,则empty()所做的返回值为true。

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

你可能想改用这种情况下,什么是

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

查看PHP手册PDOStatement::rowCount

empty()如果你希望查询完全失败只会在这里有用的 - 例如,一个无效的查询或损坏的数据库连接。在这种情况下,$result4将是null。但是,您也会遇到PDO错误,您可能会用它来处理,而不是检查记录集对象是否为空。

希望有所帮助。

1

如果没有匹配的行,查询的结果将永远不会为空。它可以是零或有其他任何东西,所以你的条件if(!empty($result4))永远不会满足。你应该检查num_rows而不是返回

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

你需要澄清你的解释。查询_can_的结果为空(无行),但返回的PDOStatement对象永远不会满足'empty()!= false' – Bojangles

1

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

1

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

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

来解决这个问题,你需要检查从查询返回的行数,因为如果没有错误,它将返回true

rowCount(); 

看看这里

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

我希望这可以帮助:)

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 

} 

马科斯