2014-06-26 134 views
0

這似乎應該是一個非常簡單的任務,但我不確定它是什麼。PHP PDO選擇查詢結果

我想使用PDO做一個SELECT查詢,然後在找出是否有任何結果(行)後立即檢查,如果有的話。

我想將結果作爲一個對象而不是一個數組來獲取,因爲我喜歡$ obj-> col_name語法,並且僅僅爲了找到上面的內容而返回一個數組感覺有點不對。

$qryh = $conn->query("SELECT ..."); 

然後使用$qryh先查明是否有任何行,如果有的話多少。

這可以做到沒有回落到使用陣列..?

UPDATE:

我知道rowCount(),但我認爲它只能在UPDATE,INSERT和DELETE - 我的問題涉及到選擇。

更新2:

我使用的是SQL Server和MS Access中,沒有MySQL和rocount()不工作。

發現的解決方案

接受的答案領先的解決方案。以下是我發現:

我創建了PDO對象(new PDO(...),其在rowCount()返回-1PDO::ATTR_CURSOR選項設置爲PDO::CURSOR_SCROLL。但是,如果我使用數組(array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL))將光標設置在->prepare(...內,它將起作用並返回行數。

http://technet.microsoft.com/en-us/library/ff628154(v=sql.105).aspx

因此,在上面的鏈接作品的例子中,設置光標在創建PDO對象不起作用。還請注意,在上述鏈接的'備註'部分,它提到PDO::CURSOR_SCROLLABLE哪個不適合我(我得到Undefined class constant 'CURSOR_SCROLLABLE')。

回答

1

試試這個方法:

$query = "select * from ..."; 
$stmt = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); 
$stmt->execute(); 
print $stmt->rowCount() 

應工作

+0

rowCount不適用於SELECT它...?只有UPDATE,INSERT和DELETE ..?!! –

+0

Only with MySQL我認爲 – GaijinJim

+0

http://www.php.net//manual/en/pdostatement.rowcount.php –

-1
$qryh->fetchColumn() 

返回通過SELECT查詢所選的行數

+0

fetchColumn返回第一列,因此名! – colburton

1
$stmt = $conn->query('SELECT ...'); 
// number of rows: 
$rows = $stmt->rowCount(); 

// get an array with objects: 
$objects = $stmt->fetchAll(); 

// another way to count the results: 
$rows = count($objects); 
+0

rowCount在SELECT上無法正常工作......?只有UPDATE,INSERT和DELETE ..?!! –

+0

爲什麼不呢?它會根據您提到的語句對結果行或受影響的行進行計數。所以它簡化了這裏的事情。 – colburton

+0

閱讀它:http://www.php.net//manual/en/pdostatement.rowcount.php –

0

這是我在我的數據庫類做:

$stmt = $conn->prepare('SELECT ...'); 
$stmt->execute(); 

$arrayOfObjects = $stmt->fetchALL(PDO::FETCH_OBJ); 
$numberOfRows = count($arrayOfObjects); 
print $numberOfRows; 

通過PDO::FETCH_OBJ每個對象是stdClass,這意味着您可以使用->語法。

我相信這是你正在尋找的,它只是使用PHP count()函數而不是mySQL rowCount()

如果你想要更多的上下文,這裏是DB類我在我所有的項目都使用:https://gist.github.com/pxlsqre/9f6471220ef187343f54

+0

謝謝JasonSilberman,但是它仍然返回一個數組而不是一個對象,所以我沒有看到如何使用 - >語法。我試了一下,得到:「試圖獲得非對象的屬性」。 –

0

你說得對,PDO::rowCount不能正常使用SELECT

一個解決辦法的工作是添加計數到您的查詢

$qryh = $conn->query("SELECT COUNT(*) as numRows FROM Table"); 
$result = $qryh->(PDO::FETCH_OBJ);; 
$count = $result->numRows;