2010-04-23 51 views
13

PDO顯然無法計算從select查詢返回的行數(mysqlinum_rows變量)。PHP PDO - Num Rows

有沒有辦法做到這一點,短缺使用count($results->fetchAll())

+1

可能的重複http://stackoverflow.com/questions/460010/work-around-for-php5s-pdo-rowcount-mysql-issue - 這個問題和你的一樣。接受的答案就是你想要的。 – zombat 2010-04-23 17:34:31

+5

我看到了這個問題,但答案很糟糕。對數據庫運行第二個查詢以查看現在存儲在記錄集中的行數是非常愚蠢的。 – Ian 2010-04-23 18:57:15

回答

12

根據手冊,有一個PDOStatement->rowCount方法;但它不應該被用來(引用)

對於大多數數據庫, PDOStatement::rowCount()確實受到 一個SELECT語句行不 回數。
相反,使用 PDO::query()發出SELECT COUNT(*)語句相同 謂詞爲您的預期SELECT 語句,然後使用 PDOStatement::fetchColumn()到 檢索將 返回的行數。
然後您的應用程序可以 執行正確的操作。


如果你已經有一個記錄,想知道有多少行是它,你就必須獲取數據,使用的fetch*方法之一;並使用計數 - 就像你所建議的那樣。

+7

是的,因此我的問題。 PDO *如何不具有num_rows功能?每個其他數據庫連接器lib都有它。 – Ian 2010-04-23 17:34:01

+0

如果你有數據,你可以自己計算它包含的行數*(如你所建議的)*;所以我想沒有*真正的*需要一種方法可以做到這一點...... – 2010-04-23 17:35:39

+5

抓取所有的數據只是爲了計算,然後拋出陣列是非常浪費,尤其是如果它是一個大陣列。 – Ian 2010-04-23 18:56:19

0

另一個選項可能更接近num_rows變量mysqli和相應的C API函數mysql_num_rows()。是使用MySQL函數FOUND_ROWS()返回相同的信息,而不必再次計算結果中的所有記錄。

例子:

$pdoDB->query('SELECT FOUND_ROWS()')->fetchColumn() 
+0

這個答案現在沒有意義,因爲你可以有規律的計數 – 2014-04-04 08:10:32

2

雖然PDO顯然有各種手段來算從MySQL的選擇查詢返回的行數,更重要的是,有沒有對這樣的功能使用第一個地方。

每當您有一個想法將rowCount()用於SELECT查詢時,它可能是多餘的,甚至是有害的。見PDO rowCount():萬一

  • 您已經選擇的數據,這一功能是多餘的,因爲你根本就統計數據
  • 您要使用此功能只得到計數的情況下,這將是有害的,因爲你不應該選擇數據來計算它。只選擇計數,使用SELECT count(*)來代替。
+2

你甚至讀過這個問題的接受答案嗎?根據PDO的文檔:「如果由關聯的PDOStatement執行的最後一條SQL語句是SELECT語句,某些數據庫可能會返回該語句返回的行數。但是,對於所有數據庫,並不能保證這種行爲,因此不應該依賴便攜式應用程序「。 – Ian 2014-04-05 14:05:36

+3

那麼,如果您要求使用便攜式應用程序,那麼不要用mysql標記您的問題。 – 2014-04-05 14:11:22

+0

我該如何去計算呢?我以後在HTML文檔中使用PHP MySQL查詢來顯示數據庫中的數據,但是我想要顯示計數的元素來自提取和顯示數據之前? – Anthony 2017-10-22 22:21:10