2012-01-22 134 views
4

這裏有很多問題,我做了大量的研究。不過,我仍然想知道我是否正在做這件事。PHP PDO mysql計數行返回

這裏是我的發言(我已經簡化它):

try { 
     $stmt = $pdc_db->prepare("SELECT * FROM table WHERE color = :color"); 
     $stmt->bindValue(':color', $selected_color); 
     $stmt->execute(); 
     $color_query = $stmt->fetchAll(); 
    } catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 

現在,我使用下面,看看這已返回任何結果:

if (count($color_query) > 0) { 

這工作。然而... SELECT語句只會返回一個結果。所以現在要訪問結果中的東西,我使用$ color_query [0] [colorname]。我知道這是因爲我使用fetchAll(),但我真的想要使用fetch()但是如果我只是使用fetch(),我失去了執行count()的能力,這很漂亮對我來說很簡單。我知道我可以做一個單獨的查詢,並檢查SELECT COUNT(*)的結果,但這似乎更多的工作(爲每個設置兩個單獨的查詢)

必須有一種方法,在mySQL中使用PDO ,檢查fetch()是否返回結果?

+0

沒有理由使用取指取代fetchall –

回答

4

$stmt->rowCount()執行()後,但不能與所有數據庫一起工作...嘗試使用MySQL,看看你得到什麼。

+1

哇,這實際上工作。在我搜索的大多數地方中,rowCount()都不能用於mySQL,所以我從不打擾。 – phpmysqlguy

+1

rowCount()是否工作取決於基礎數據庫驅動程序是使用實際遊標還是僅返回緩衝的所有結果。 MySQL大部分都是後者。 –

+1

感謝您的信息。我想這裏真正的教訓是不要假設rowCount()將不起作用。它在我使用mysql的情況下適用於PHP PDO。希望這可以節省別人一些時間。 – phpmysqlguy

0

你可以用fecth來做,fecth如果沒有結果的話會返回false。

if ($row = $stmt->fetch()) { 
    //get the first row of the result. 
    //.... 
} 
+1

有時你必須知道在開始循環之前是否有結果。 –

+0

@ Col.Shrapnel他只需要結果的第一行,不需要循環。 – xdazz

+0

好吧,我重新讀這個問題,它可能是這樣的。然而,這是相當不明確的。 –