2012-09-14 83 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();