Here are a few pointers to make it run just a little faster also.
don't extract the entire $GLOBALS array. just use the $var that you need.
function GetData($Query)
{
return(mysql_query($Query, $GLOBALS[db_conn]));
}
another thing would be to build a wrapper function for mysql_query() and
have it display your error code/problems.
why are you using a define to set an SQL query string?
Jim
- Original Message -
From: "Fred" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, November 14, 2001 9:45 AM
Subject: [PHP] Including declare statements that contain variables
> I would like to offer my recent experience in the hope that it will help
> others avoid the wasted effort and frustration I managed to burden myself
> with yesterday. I will start by stating that the conclusions I have drawn
> may seem obvious at first blush, however in a troubleshooting environment
it
> is sometimes difficult to see the forest for the trees. This is
> particularly true when several principles of PHP syntax are working in
> concert to produce a problem.
>
> My problems started when I found myself in the rare position of needing to
> write a function that accessed global variables rather than passed values
or
> references. This need arose because I was writing a data access
abstraction
> function and would have no way of knowing in advance what variables would
> need to be accessed or in what order. The total number of possible
> variables was large when compared with the total number of lines of code
in
> the function. If I had chosen to write the function to accept an
> associative array that could be extracted within the function to produce
the
> needed variables the total number of lines of code needed outside of the
> function to produce the array would have been greater than the total
number
> of lines of code within the function.
>
> Because the purpose of choosing to use a function rather than writing the
> code several times was to reduce the number of lines of code and provide
> clarity to the script I decided that passing an array to the function was
> not an option.
>
> I decided to simply write the function so that it had access to all
> variables in the GLOBALS array to overcome this problem. The function was
> as follows:
>
> // Function to send query and retrieve result pointer
> function GetData($Query)
> {
> extract ($GLOBALS);
> $Result = mysql_query($Query, $db_conn)
>or die (mysql_error());
> Return $Result;
> }
>
> The function accepts an SQL statement as an argument and returns a pointer
> to a result set. The SQL statement that is passed to the function is one
of
> many defined constants, many of which contain variables. For example:
>
> define ("ClassesByTeacher","SELECT Classes.SectionNo, Period, CourseNo,
> Title, Teacher FROM Classes, Attendance WHERE Classes.SectionNo =
> Attendance.SectionNo AND Teacher LIKE \"$Teach\" AND Attendance.Date =
> \"$SQLDate\" GROUP BY Classes.SectionNo");
>
> This particular statement needs to have access to the $Teach and $SQLDate
> variables. When these variables were passed as GET values in the URL the
> function worked as expected. However, if I assigned the variables within
> the code of the script outside the function I invariably received empty
> result sets. I spent quite a bit of time under the impression that the
> global variables where not being accessed by the function unless they
where
> GET variables. This did not turn out to be the case. Upon adding debug
> code to the script I was able to determine that the function was correctly
> accessing the global variables, but the mysql_query function was not. As
it
> turned out, and this is the part that may seem obvious, the problem
resulted
> from the fact that the define statement was evaluating the variables to ""
> before they were actually set in code.
>
> The result was an SQL statemente like this:
>
> SELECT Classes.SectionNo, Period, CourseNo, Title, Teacher FROM Classes,
> Attendance WHERE Classes.SectionNo = Attendance.SectionNo AND Teacher LIKE
> "" AND Attendance.Date = "" GROUP BY Classes.SectionNo
>
> which explains the empty data sets and lack of an error message.
>
> The define statements are in a seperate file that is included into the
> script. It is my general practice to include all files that contain
> functions as the beginning of a script and this is what I had done here.
As
> soon as the file containing the defines was included the variables were
> evaluated to empty strings within the defined constant before the
variables
> were set to usable values within the code. Moving the include statement
> below the variable assignments in the script provided the solution.
>
> The lesson I learned is this:
>
> When including files that contain declare statements which in turn contain
> variables, always include the file after the variables have actually been
> set to their desired values.
>
> Fred
>
>
>
>
> --
> PHP General Mailing List (http: