0

如果有任何事件绑定到带有 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__));
}

谢谢

4

2 回答 2

1

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

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

于 2012-09-14T05:50:12.213 回答
-1

当你有你的代码时它没有列出事件的原因是结果集已经使用你的 fetchAll 语句获取(fetchAll不会留下任何东西要在以后使用 获取fetch)。

在这种情况下,您最好运行 aselect count(*)来获取行数,然后实际运行完整的查询来遍历结果:

PDO 中的一个示例如下:

<?php
$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {

    /* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {

        /* Issue the real SELECT statement and work with the results */
         $sql = "SELECT name FROM fruit WHERE calories > 100";
       foreach ($conn->query($sql) as $row) {
           print "Name: " .  $row['NAME'] . "\n";
         }
    }
    /* No rows matched -- do something else */
  else {
      print "No rows matched the query.";
    }
}

$res = null;
$conn = null;
?>

请注意,您不能直接使用 rowCount 来获取所选行数 - 它旨在显示已删除的行数等。

于 2012-09-14T05:47:42.797 回答