Re: Query refuses to recurse all rows

From: Date: Thu, 29 May 2008 03:11:43 +0000
Subject: Re: Query refuses to recurse all rows
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-274796@lists.php.net to get a copy of this message
celtic@aolohr.com wrote:
Hi, In the following code, only the first row from query1 displays along with the display stuff from query3. The problem: query1 refuses to recurse to the next and following rows. It appears that the sub-queries in the main query cause the $row++; not to work. Is there some conditional that might it prompt it to do so? I'm stumped - worked at variations for a few days. Any help, pointers, suggestions most gratefully welcome! <?php include("dbc.php"); if (!$db){ $_SESSION['db'] = "select-thread"; session_write_close(); header("location: db.php");} $query1 = "SELECT * FROM replies WHERE mid = '{$_SESSION['mid']}'"; $result1 = pg_exec($db, $query1); if (!$result1) { exit;} $numrows1 = pg_numrows($result1); $row = 0; do { $myrow = pg_fetch_array($result1, $row); /* display stuff */ $query2 = "SELECT * FROM subs WHERE mid = '{$_SESSION['mid']}' AND rid = '{$myrow['rid']}'"; $result2 = pg_exec($db, $query2); if (!$result2) { exit;} $numrows2 = pg_numrows($result2); $row = 0; do { $myrow = pg_fetch_array($result2, $row); /* display stuff */ $row++; } while ($row < $numrows2); $query3 = "SELECT * FROM subs where subsid = '{$_SESSION['subsid']}' AND rid = '{$myrow['rid']}' AND responded = '1'"; $result3 = pg_exec($db, $query3); if (!$result3) { exit;} $numrows3 = pg_numrows($result3); $row = 0; do { $myrow = pg_fetch_array($result3, $row); /* display stuff */ $row++; } while ($row < $numrows3);.... $row++; } while ($row < $numrows1); ?>
If I may, I would like to suggest a few other changes that you might like. first off, don't use counters, they waist cpu cycles. Try this code out. <?php include("dbc.php"); if (!$db){ $_SESSION['db'] = "select-thread"; session_write_close(); // Whhhhaaaattttt........??? what is this for? header("location: db.php");} # # # # why are you displaying anything after a header('Location ....') call? // Build first query $query1 = "SELECT *
           FROM   replies
           WHERE  mid = '{$_SESSION['mid']}'";
// Execute query. if it fails, skip this block if ( ($result1 = pg_exec($db, $query1)) !== false ) { // if we are here, the query worked. Loop through results while ( $row1 = pg_fetch_assoc($result1) ) {
    /* display stuff */
    // Build second query
    $query2 = "SELECT *
               FROM   subs
               WHERE  mid = '{$_SESSION['mid']}'
               AND    rid = '{$row1['rid']}'";
    // Execute second query, if it fails, skip this block
    if ( ($result2 = pg_exec($db, $query2)) !== false ) {
      // If we are here, the query worked.  Loop through results
      while ( $row2 = pg_fetch_assoc($result2) ) {
        /* display stuff */
      }
    }
    // Build third query
    $query3 = "SELECT *
               FROM   subs
               WHERE  subsid = '{$_SESSION['subsid']}'
               AND    rid = '{$row1['rid']}'
               AND    responded = '1'";
    // Execute third query, if it fails, skip this block
    if ( ($result3 = pg_exec($db, $query3)) !== false ) {
      // If we are here, the query worked.  Loop through results
      while ( $row3 = pg_fetch_assoc($result3) ) {
        /* display stuff */
      }
    }
} } ?> My guess is is that you don't want to actually 'exit;' the script if a query fails, you just wanted to skip displaying any data for it. I might be wrong, but I adjusted my example to factor this in. Inquiring minds want to know. Why is it that you have a header() call with a location header that tells this script to go somewhere else, but then you display a bunch of data after the header call is sent to the client?

« previous php.general (#274796) next »