如何使用PHP检查db查询返回的结果';s PDO

如何使用PHP检查db查询返回的结果';s PDO,php,pdo,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()) {

如何在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>';
}

但是,我们刚刚开始使用PDO和准备好的语句,并对照
$STH
进行检查,结果似乎并不像预期的那样有效——它总是有价值的

只需转储有关变量的信息

var_dump($STH)
编辑


我刚才有个问题。这是有作用的。只需使用
$STH->rowCount()用于行计数,然后进行比较

我会尝试使用:

但是,根据手册:

如果关联的PDO语句执行的最后一条SQL语句为 对于SELECT语句,某些数据库可能返回行数 由该声明返回。然而,这种行为不能保证 适用于所有数据库,不应依赖于 应用程序

如果不适合您,您可以使用手册中提到的其他方法


当然,您也可以在
循环之前设置一个变量,而
循环时,在循环中更改它并检查循环后的值…

好的,这是代码,它确实起作用,最后,经过几个小时的环顾和混合匹配,这里的一些答案实际上会返回select语句的计数。 SQL显然是select语句 $username1是用户名文本框的post。 $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();

这不是我问题的答案!我不想转储我的变量。我想检查数据库查询是否返回结果!执行类似于返回$result的操作,然后print_r()@mk_89:我没有$result变量,我有$STH变量,无论它是否有结果集,它总是包含数据。我刚刚得到了一个问题。这里有一个rowCount()函数。做$STH->rowCount();谢谢你,伙计。我编辑我的投票。有人在你之前回答了,所以很遗憾,我会接受他们的回答。谢谢,太好了。按预期工作。我刚刚读到这篇文章,另一种方法是使用columnCount()。您认为rowCount()和columnCount()之间有性能差异吗?@ShadowStorm
columnCount()
应该非常快,但是如果可用,
rowCount()
也应该如此。您必须对此进行测试才能确定。我发现
columnCount()
效果最好,因为它在我的所有测试用例下都将返回
0
rowCount()
经常返回修改过的行并抛出我的逻辑。您参考的“手册中提到的其他方法”是什么?
$rows_found = $STH->rowCount();
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();