0

host_idパラメーターを使用してホストにバインドされているイベントがあるかどうかを行を確認したいのですが、ホストにバインドされているイベントがなく、出力されない場合はすべて問題ありませんが、ホストがイベントの1つにバインドされている場合、イベントは一覧表示されませんが、問題のコメントで以下に示したコードを削除すると、ここから問題が始まり、ここで問題が終了し、イベントが一覧表示されます。私は別の目的で上記の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

2 回実行せずに 2 回フェッチすることはできません。$count3アイテムを再利用したくない場合は、トリガーcloseCursor()に続いてexecute()再度セットをフェッチすることができます。

$count3変数を再利用するには、whileループを次のように変更します。foreach($count3 as $fetch) {

于 2012-09-14T05:50:12.213 に答える
-1

コードがあるときにイベントがリストされない理由は、結果セットが fetchAll ステートメントを使用して既にフェッチされているためです (fetchAll後でフェッチするものは何も残しませんfetch)。

この場合、 aを実行しselect 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 に答える