2015-12-31 48 views
0

我目前查詢數據庫兩次來找回我的結果集,我的結果的行數設置之前我運行的行環回這樣的:PHP PDO - 檢索結果和行數 - 便攜式解決方案

$result = $db->query("SELECT COUNT(*) FROM mytable"); 
$result1 = $db->query("SELECT * FROM mytable"); 

$count = $result->fetchColumn(); 

if($count == $value){ 

while($row = $result1->fetch(PDO::FETCH_ASSOC)){ 
//execute code 
    } 
} elseif($count == $value2) { 
//execute other code 
} 

我剛剛轉換爲PDO,所以不知道它。代碼用於使用mysql_num_rows。我正在尋找一種方法,可以在不查詢數據庫兩次的情況下執行此操作,這種我一直使用的解決方案可用於小型目的,但如果數據庫已縮放,則顯然是不必要的數據庫負載。很多謝謝

編輯:我搬到PDO的原因是它的便攜性功能,因此rowCount()並不適合每一個實例。

+1

它總是閱讀您使用該工具的文檔是個好主意。例如,它向您顯示可用方法的列表。在這裏它顯示你這個:http://php.net/manual/en/pdostatement.rowcount.php – arkascha

+1

['rowCount'](http://php.net/manual/en/pdostatement.rowcount.php)可能你在找什麼。 – Script47

+1

@ Script47'rowCount'不在'SELECT'語句上執行。 – Ohgodwhy

回答

1

您可以使用rowCount()方法獲取的行數,像這樣:

$result = $db->query("SELECT * FROM mytable"); 
$count = $result->rowCount(); 

echo $count; 

while($row = $result->fetch(PDO::FETCH_ASSOC)){ 

    // your code 

} 

這裏的參考:

編輯:

如果你不想使用rowCount()方法,這是另一種方法。

$result = $db->query("SELECT * FROM mytable"); 
$result_set = $result->fetchAll(); 
$count = count($result_set); 

echo $count; 

while($row = array_shift($result_set)){ 

    // your code 

} 

下面是相關參考文獻:

+0

道歉,這只是一個打字錯誤,不是實際代碼的副本/ pase,並且不回答我問的問題。儘管如此,我現在已經編輯過。 –

+0

@AdamCopley我已經更新了我的答案。 –

+0

應該注意的是rowCount()不能保證適用於跨所有平臺的SELECT查詢! –

0

在你的情況下,沒有理由執行COUNT(*)查詢。您可以統計返回的行數。

$count = $result->fetchAll(); 

現在$count持有參照多少行返回。

+0

這個答案不起作用,而'$ result-> rowCount();'做。 –

+0

@AdamCopley我的解決方案不適合你嗎? – Ohgodwhy

+0

可以肯定的是,不過你省略了Rajdeep Paul提供的重要'count($ result)',因此是我的問題的第一個工作解決方案。非常感謝您的回答。 –