Re: [PHP] Including declare statements that contain variables

2001-11-14 Thread Fred


Jim Lucas <[EMAIL PROTECTED]> wrote in message
012301c16d3a$6def13c0$96def5cc@bendcom">news:012301c16d3a$6def13c0$96def5cc@bendcom...
> 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]));
> }

The problem with this approach is that I do not know ahead of time which
GLOBALS
I will need (other than $db_conn).  For instance, once query may depend of
the $ClassID
and $Attendance variables while another depends on the $StudentID and $Grade
variables

>
> why are you using a define to set an SQL query string?

I am using define to set SQL query strings because there are a limited
number (30 or so)
of queries used by the application, but they are used in different contexts.
So, for example,
I may have:

 "SELECT FirstName, LastName, Grade, Attendance FROM Students, Classes
WHERE Students.StudentID = Classes.StudentID AND ClassID = $Class"

defined as StudentsByClass.  I can then pass the function the constant and
use it in
different situations.  For example:

PrintMenu("Students",GetData(StudentsByClass));

will print a menu of student names whereas:

PrintAttendance(GetData(StudentsByClass));

would print an attendance report

Fred




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




Re: [PHP] Including declare statements that contain variables

2001-11-14 Thread Jim Lucas

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: