2013-01-17 60 views
1

我正在把PHP中的所有與mysql相關的東西變成PDO格式。這就是說,我需要問一些問題。MySQL等效的mysql_num_rows。哪個更好?

我知道,而不是使用mysql_num_rows()來找出行數返回,一個好的辦法是

"SELECT COUNT(*) FROM table" 

那麼,與PDO,是它更好地做到:

$stmt = $db->query('SELECT COUNT(*) FROM table'); 
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$count = count($results); 

OR

$stmt = $db->query('SELECT * FROM table'); 
$count = $stmt->rowCount(); 

感謝

+0

你想使用'SELECT'ed數據嗎?因爲在那種情況下,第二個更好。第一個甚至不返回數據。 –

回答

1

我不會說這是「一個很好的選擇。」這是完全不同的東西。

SELECT data FROM table 

獲取數據,你可以使用。然後,您可以使用mysql_num_rows()(或PDO案例中的rowCount())獲取記錄數(用於渲染,分頁或其他)。

如果你只是想記錄(而不是實際數據)的數量,你應該使用

SELECT COUNT(data) FROM table 

因爲你只選擇記錄的(準確地說,你指望非-NULL值爲data,使用SELECT COUNT(*)獲取所有記錄)。

如果您將使用後者與前者結合使用,那麼當兩個查詢之間的記錄數發生變化時,您可能會遇到麻煩。

+0

這是PHP。網絡上有大量**的代碼,建議用'SELECT *'/'num_rows'來計數。從這個角度來看'SELECT COUNT(*)'確實是更好的選擇;) –

0

A SELECT COUNT沒有GROUP BY將始終只返回1行,1個字段,即與您的COUNT條件相匹配的行總數,在此情況下爲所有行。因此,對該結果做一個PHP count()將始終返回1,因爲$results陣列中只有1個元素。所以這兩個選項中的選項2是唯一有效的選項。

0

最好將這個

$nRows = $pdo->query('select count(*) from table')->fetchColumn(); 
echo $nRows; 

編輯:刪除計數。

+0

這不會**總是**返回「1」,因爲'計數'總是會存在(但只是有不同的值?) – h2ooooooo

+0

是的,我同意。快速回答中有錯字!謝謝:) – Venu

1

你的問題對我沒有意義。
正如你已經知道,要問一個數據庫只有一個號碼行比要求所有行自己,然後數出它們 - 爲什麼你認爲如果它會否則,如果你是使用不同的數據庫驅動程序

要字面上回答你的問題:SELECT COUNT(*)不是一個「不錯的選擇」,但只計數行的正確方法,無論使用什麼特定的API將查詢發送到數據庫。

然而,正如有人指出的意見 - 如果你已經選擇行,並想知道返回的行數 - 這將是完全相反:運行一個額外的查詢來獲取計數將毫無意義,並無論使用哪種API函數來獲取結果集的行計數都是唯一正確的方法。
但無論如何,這些問題與從一個API遷移到另一個不相關。

更新
啊哈,看起來像我到了你的困惑的根源!
看起來你被老的API誤認爲是與數據庫服務器--MySQL共享它的名字。
作爲事實上,這是不同的問題 - MySQL的RDBMS是一個數據庫服務器,而MySQL擴展在PHP只是一個API(一組函數)來訪問該服務器。
而PDO不是數據庫服務器,而是另一個API。所以,在您的查詢中有沒有變化,但只有在您用來將它們發送到數據庫的函數中。希望能幫助到你。

+0

我想他想查詢一些數據,然後找出他究竟有多少(做正確的渲染,或其他)。無需查詢兩次。 –

+0

那麼,有時我需要知道的所有信息都可以由行數決定。使用php中的常規mysql函數,當我需要實際選擇列並使用行數時,我會使用mysql_num_rows()。但是,當我只需要返回的行數時,我只會使用SELECT COUNT(*)。 PDO對我來說是相當新的。 – Lance