6

如何在 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似乎没有按预期工作——它总是有价值的!

4

3 回答 3

8

我会尝试使用rowCount()

$rows_found = $STH->rowCount();

但是,根据手册:

如果关联 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序。

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

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

于 2012-09-14T17:48:09.400 回答
0

只需转储有关变量的信息。

var_dump($STH)

编辑

我刚收到问题。有这个rowCount()功能。只需 $STH->rowCount();用于行数,然后进行比较。

于 2012-09-14T17:39:44.657 回答
0

好的,这是它确实起作用的代码,最后经过几个小时的环顾并混合匹配一些答案,这是一个实际上会返回您的 select 语句的计数的代码。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();
于 2014-12-11T11:00:00.767 回答