2009-01-20 31 views
14

我最近開始使用PHP5開發一個新項目,並且希望使用它們的PDO類。問題是MySQL PDO驅動程序不支持rowCount(),因此無法運行查詢,然後獲取受影響的行或返回的行數,這是一個相當大的問題,就我而言。我想知道以前是否有其他人處理過這個問題,以及您爲解決問題所做的工作。必須執行fetch()或fetchAll()來檢查是否有行受到影響或返回,這似乎是對我的一種破解,我寧願只做$ stmt-> numRows()或類似的東西。PHP5的PDO解決方案rowCount MySQL問題

+0

這似乎不是PHP 5.4中的問題。有人可以確認嗎? – David 2013-03-04 19:24:15

回答

25

您可以在原始SELECT查詢後立即發出SELECT FOUND_ROWS()查詢以獲取行計數。

$pdo->query("SELECT * FROM users"); 
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn(); 

參見:MySQL Docs on FOUND_ROWS()

+1

有一個問題,rowCount()適用於我,也適用於SELECT語句。自從這個問題得到解答後,這是否已經實施? – Mattis 2011-06-19 16:34:20

+0

@Imran rowCount()也適用於select,也適用於像'SHOW TABLES LIKE'''查詢之類的查詢。我正在使用PHP 5.2.6。不知道我的Pecl版本。如何檢查?它可能是一個PHP 5.2.6 +的問題?發現這個問題 - http://stackoverflow.com/questions/769767/pdos-rowcount-not-working-on-php-5-2-6 – 2012-06-18 17:24:45

+0

rowCount()只工作正常,如果你以前執行fetchAll(),但如果你正在使用fetch()(這是更好的原因會消耗更少的內存),那麼不會這樣做。 – itsjavi 2013-07-08 17:16:44

1

對於那些你誰正在使用MySQL存儲過程,這個解決方案是不是真的可行。我建議你做的是讓你的存儲過程創建兩個行集。第一個將包含一行和一列,包含記錄的數量。第二個將是您將用於獲取該行數的記錄集。

無限的行數可以是具有完全相同的WHERE子句作爲第二行集一個SELECT COUNT(*)而不LIMIT/OFFSET條款。

另一個想法可能是創建一個臨時表。使用您的SELECT語句來填充臨時表。那麼你可以使用SELECT COUNT(*) FROM tmpTable作爲你的第一行,而SELECT * FROM tmpTable作爲你的第二行。

0

這個問題是基於幾個錯誤的假設和一個過時的陳述。

首先,不要混淆受影響的選中的行的數字。即使在09年,PDO也支持前者。

說到SELECT語句返回的行數 - 你只需要這個數字。你擁有的數據就夠了。

是的,現在rowCount()也支持從mysql中選擇的行數。但是,無論如何,您在平均網絡應用程序中並不需要這個數字。