2013-05-21 65 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 

} 

馬科斯