At 3:27 PM -0700 6/29/02, Brad Melendy wrote:
>Hi All,
>I've stumped myself here.  In a nutshell, I have a function that returns my
>array based on a SQL query and here's the code:
>
>-------------begin code-------------------
>function getCourses($UID)
>  {
>  global $link;
>  $result = mysql_query( "SELECT C.CourseName FROM tblcourses C, tblusers U,
>tblEnrollment E WHERE C.ID = E.CourseID AND E.UserID = U.ID AND U.ID =
>$UID", $link );
>  if ( ! $result )
>   die ( "getRow fatal error: ".mysql_error() );
>  return mysql_fetch_array( $result );
>  }
>------------end code ----------------
>
>I call this from a PHP page with the following code:
>
>------------begin code--------------
>$myCourses = getCourses($session[id]);
>foreach ($myCourses as $value)
>  {
>  print "<br>$value";
>  }
>------------end code---------------
>
>Now, when I test the SQL from my function directly on the database, it
>returns just want I want it to return but it isn't working that way on my
>PHP page. For results where there is a single entry, I am getting the same
>entry TWICE and for records with more than a single entry I am getting ONLY
>the FIRST entry TWICE.
>
>Now I know my SQL code is correct (I am testing it against a MySQL database
>using MySQL-Front) so I suspect I'm doing something stupid in my foreach
>loop.


I think your problem lies in a misunderstanding of the 
mysql_fetch_array() function. It doesn't return the entire result set 
in an array - just one record at a time. You can fix this in one of 
two ways:

(1) Loop though the entire result set in your function:

    function getCourses($UID)
     {
      global $link;

      $ResultSet = array();

      $result = mysql_query( "SELECT C.CourseName FROM tblcourses C, tblusers U,
       tblEnrollment E WHERE C.ID = E.CourseID AND E.UserID = U.ID AND U.ID =
       $UID", $link );

      if ( ! $result )
       die ( "getRow fatal error: ".mysql_error() );

      while ($Row = mysql_fetch_array( $result ))
      {
       $ResultSet[] = $Row['C.CourseName'];
      }

      return $ResultSet;
     }

    ...

    $myCourses = getCourses($session[id]);
    foreach ($myCourses as $value)
     {
     print "<br>$value";
     }

or (2) set a flag in getCourses() so that the query is only executed 
once, otherwise returning a result line - something like:

    function getCourses($UID)
     global $link;
     static $result = false;

     if (!$result)
      {
        $result = mysql_query( "SELECT C.CourseName FROM tblcourses C, 
tblusers U,
         tblEnrollment E WHERE C.ID = E.CourseID AND E.UserID = U.ID AND U.ID =
         $UID", $link );
        if ( ! $result )
         die ( "getRow fatal error: ".mysql_error() );
      }
     {
     return mysql_fetch_array( $result );
     }

    ...

    while ($Row = getCourses($session[id]) as $value)
     {
     print "<br>", $Row['C.CourseName'];
     }

(standard caveats about off-top-of-head, untested code apply)

The reason you are getting the first record TWICE is becaouse of the 
default behaviour of the mysql_fetch_array() function. It returns 
both an associative array - ie, elements of the form <field-name> => 
<value> - and a numerically indexed array (0, 1, 2, etc.). You can 
alter this behaviour by the second parameter of the function: see

        http://www.php.net/manual/en/function.mysql-fetch-array.php

-steve


>I'm hoping someone will spot my dumb mistake.  Thanks very much for any help
>at all on this.
>
>....Brad
>
>
>
>--
>PHP General Mailing List (http://www.php.net/)
>To unsubscribe, visit: http://www.php.net/unsub.php


-- 
+------------------------------------------------------------------------+
| Steve Edberg                                      [EMAIL PROTECTED] |
| University of California, Davis                          (530)754-9127 |
| Programming/Database/SysAdmin               http://pgfsun.ucdavis.edu/ |
+------------------------------------------------------------------------+
| The end to politics as usual:                                          |
|                 The Monster Raving Loony Party (http://www.omrlp.com/) |
+------------------------------------------------------------------------+

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to