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 Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php