PHP PDO行计数

时间:2012-09-14 05:35:55

标签: php mysql pdo rowcount

我想检查行是否有任何事件绑定到具有host_id参数的主机,如果没有绑定到主机的任何事件,一切都很好,它打印出来没有,但是如果主机绑定到一个事件,它没有列出事件,但如果我删除我在下面指出的代码,注释问题从这里开始,问题在这里结束,它列出了事件。我正在使用上面的fetchAll函数用于另一件事,上面没有任何这样的错误,但是在下面的部分,它没有列出事件,我该如何解决?

由于

try
{
    $eq = "SELECT * FROM `events` WHERE `host_id` = :id AND `confirmed` = '1' ";
    $eq_check = $db->prepare($eq);
    $eq_check->bindParam(':id', $id, PDO::PARAM_INT);
    $eq_check->execute();

    //problem starts here
    $count3 = $eq_check->fetchAll();
    $rowCount = count($count3);

    if ($rowCount == 0) 
    {
        echo "None"; 
    }
    //problem ends here

    while($fetch = $eq_check->fetch (PDO::FETCH_ASSOC) )
    { 
        $_loader = true;

        $event_id = $fetch['event_id'];
        $event_name = $fetch['event_name'];
        $link = "https://www.mywebsite.com/e/$event_id";

        echo "<a target=\"_blank\" href=\"$link\"><li>$event_name</li></a>";
    }
} 
catch(PDOException $e)
{
    $log->logError($e." - ".basename(__FILE__));
}

谢谢

2 个答案:

答案 0 :(得分:1)

如果不执行两次,则无法获取两次。如果您不想重复使用$count3项,则可以再次触发closeCursor(),然后再次execute()再次获取该集。

要重复使用$count3变量,请将while循环更改为:foreach($count3 as $fetch) {

答案 1 :(得分:-1)

当你有代码时没有列出事件的原因是结果集已经使用你的fetchAll语句获取了(fetchAll没有留下任何东西以后用{{1 }})。

在这种情况下,您可能最好运行fetch来获取行数,然后实际运行完整查询以循环显示结果:

PDO中的一个例子是here

select count(*)

请注意,您无法直接使用rowCount来获取所选行数 - 它是为了显示已删除的行数等。