2012-09-14 80 views
5

如何使用PHP中的PDO檢查我的結果集是否爲空?如何使用PHP的PDO檢查數據庫查詢返回的結果

$SQL = "SELECT ......... ORDER BY lightboxName ASC;"; 
$STH = $DBH->prepare($SQL); 
$STH->bindParam(':member_id', $member_id); 
$STH->execute(); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 

while($row = $STH->fetch()) { 
    $lightbox_name = $row['lightboxName']; 
    $lightbox_id = $row['lightboxID']; 
    echo '<option value="'.$lightbox_id.'">'.$lightbox_name.'</option>'; 
} 

我用來做這樣的:

$result = mysql_query("SELECT ...... ORDER BY lightboxName ASC;"); 
if(!$result) { echo 'No results found!'; } 

但剛剛使用PDO和準備語句和檢查,對$STH似乎並不如預期的工作開始了 - 它總是具有價值!

回答

8

我會嘗試使用rowCount()

$rows_found = $STH->rowCount(); 

但是,根據手冊:

如果由相關PDOStatement對象執行的最後一條SQL語句 SELECT語句,有些數據庫返回該語句返回的行數 。但是,對於所有數據庫,此行爲不保證 ,不應依賴便攜式 應用程序。

如果它不適合你,你可以使用手冊中提到的其他方法。

你當然也可以設置一個變量的while循環之前,改變它在你的循環及循環後檢查值...

+0

完美。按預期工作。我只是讀這個,另一種方法是使用columnCount()。你認爲rowCount()和columnCount()之間存在性能差異嗎? – ShadowStorm

+0

@ShadowStorm columnCount()'應該超快,但是如果可用的話,還是'rowCount()'。你必須進行測試才能確定。 – jeroen

+1

我發現'columnCount()'效果最好,因爲它會在我所有的測試用例下返回'0'。 'rowCount()'通常返回修改過的行並拋出我的邏輯。 – Ben

1

只是轉儲有關變量的信息。

var_dump($STH) 

編輯

我剛剛得到的問題。有這個功能rowCount()。只需使用$STH->rowCount();作爲行計數然後比較它。

+2

這不是我的問題的答案!我不想轉儲我的變量。我想檢查數據庫查詢是否返回結果! – ShadowStorm

+0

做一些像返回$結果,然後print_r() –

+0

@ mk_89:我沒有$結果變量,我有$ STH變量,它總是包含數據,無論它是否有結果集。 – ShadowStorm

0

確定這裏是它的工作代碼,並在幾個小時後終於環顧四周並混合匹配一些答案,這實際上會在你的選擇陳述中返回一個計數。 SQL是顯式選擇語句 $ username1是用戶名文本框的帖子。 $ password1與用戶名設置相同。 除此之外,你應該擁有所有你需要的東西來使它工作,只需要用你的變量代替我的地方。我希望這可以節省一些人的時間,因爲我搜索了一段時間,試圖得到我想要的東西。 此解決方案適用於具有select語句的情況,並且您希望能夠根據返回的內容繼續或停止。

SQL = 'SELECT * from Users WHERE Username = :Username AND Password = :Password'; 
STH = $conn->prepare($SQL); 
STH->bindParam(':Username', $username1); 
STH->bindParam(':Password', $password1); 
STH->execute(); 
STH->setFetchMode(PDO::FETCH_ASSOC); 


row_count = $STH->rowCount();