2013-04-13 66 views
-1

我想從一個已準備好的PDO語句中同時得到返回的行數以及實際行,這可能嗎?是否可以返回行以及來自一個PDO函數的行數?

我使用的是PHP 5+和Mysql。

例如:

global $dbh 
$query = "SELECT title, date, title, description 
     FROM posts 
     WHERE title LIKE '%foo%' 
     ORDER BY date 
     DESC"; 

$stmt->prepare($query); 
$stmt-execute(); 

$count = count($stmt->rowCount()); 
$searcharray = $stmt->fetchAll(PDO::FETCH_ASSOC); 

return array($count, $searcharray); 
+1

某些DB(例如mysql)將返回通過rowCount()檢索到的總行數,但這不是通用行爲,PDO也不能對此進行反對。你必須運行* TWO *查詢,一個計數,一個執行實際提取。 –

+3

在你的例子中,爲什麼不在'rowCount()'後面對'fetchAll'的結果進行計數而不是對'count'進行計數? rowCount()通常從更新/插入/刪除查詢中返回受影響的行。 – Jon

+0

不會計數($ stmt-> rowCount())總是返回1嗎? – JRL

回答

0

每請求,回答表格。 ^^

更改代碼是這樣的:

global $dbh 
$query = "SELECT title, date, title, description 
     FROM posts 
     WHERE title LIKE '%foo%' 
     ORDER BY date 
     DESC"; 

$stmt->prepare($query); 
$stmt-execute(); 

$searcharray = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$count = count($searcharray); 

return array($count, $searcharray); 

PDOStatment::rowCount()函數返回一個更新/插入的影響行/ delete語句。相反,請計算fetchAll的結果,因爲這將精確計算select語句返回的行數。

0

當你有一個行數組時,你不需要計數。你可以隨時獲得它。
所以,只需返回一個數組,然後在需要時計數。

相關問題