2012-09-14 13 views
5

PHPでPDOを使用して結果セットが空であるかどうかを確認するにはどうすればよいですか?PHPのPDOを使用してdbクエリの返された結果を確認する方法

$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ループの前に変数を設定することができ

...ここでOK

+0

パーフェクト。意図どおりに動作します。私はちょうどこれについて読んでいたし、それを行う別の方法はcolumnCount()を使うことです。 rowCount()とcolumnCount()の間にパフォーマンスの違いがあると思いますか? – ShadowStorm

+0

@ShadowStorm 'columnCount()'は超高速でなければなりませんが、 'rowCount()'も使用可能であれば再度それを使用します。あなたは確かにそれをテストしなければならないでしょう。 – jeroen

+1

私は 'columnCount()'がすべてのテストケースの下で '0'を返すので、最も効果的だと分かりました。 'rowCount()'はしばしば変更された行を返し、私のロジックを投げ捨てます。 – Ben

1

変数に関する情報をダンプするだけです。

var_dump($STH) 

EDIT

私は質問を得ました。そのためにはrowCount()の機能があります。行数に$STH->rowCount();を使用して比較してください。

+2

これは私の質問に対する回答ではありません。私は変数をダンプしたくありません。私はデータベースクエリが結果を返すかどうかをチェックしたい! – ShadowStorm

+0

return $ resultとprint_r()のようなことをします。 –

+0

@ mk_89:$結果変数はありません。$ STH変数があり、結果セットがあるかどうかにかかわらず、常にデータが入っています。 – ShadowStorm

0

はそれが仕事を行うコードで、最終的には数時間後にここでいくつかの答えを照合してミックスすることは、実際にはselectステートメントでカウントを返すものです。 SQLは明らかにselectステートメントです $ username1はusernameのテキストボックスのポストです。 $ 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(); 
関連する問題