NYCPHP Meetup

[nycphp-talk] PHP/MySQL environment problem??

David Krings ramons at gmx.net
Mon Mar 3 13:13:05 EST 2008


PaulCheung wrote:
I looked over the code and a few things struck me odd (which doesn't mean they 
are wrong!).


> //

You add this between each handful of lines without adding any informative 
comment. I'd remove those slashes and make the code easier to read - or even 
better add commentary.

> @ $cps;  //Current Page Starting row number
> @ $lps;  //Last Page Starting row number
> @ $rpp;  //Records Per Page

I have no idea what the significance of these lines is. The @ is usually used 
to suppress error message output (IMHO a bad idea), but the statement (or lack 
thereof) doesn't do anything.


> $q="SELECT SQL_CALC_FOUND_ROWS *
>     FROM tr_test_record
>  WHERE $access = tr_access";
> //
> $rs=mysql_query($q) or die(mysql_error());
> //
> $q0="Select FOUND_ROWS()";

When you run the query in the MySQL query editor, how many rows does MySQL return?
I always burn extra cycles and read the query results in a loop and increase a 
counter. All the MySQL functions that return a count do that for the last 
query run under the current connection, which may or may not be the last query 
that your code ran.
I am not that familiar with all the SQL keywords, but it strikes me that 
SQL_CALC_FOUND_ROWS returns already the count that you are looking for, which 
is one result row. So counting that result later on will always be 1.
I rather have some of the SQL epxerts chime in here as I quickly move into an 
area that I have no clue about.

> //
> $rs0=mysql_query($q0) or die(mysql_error());
> //
> $row0=mysql_fetch_array($rs0);
> //
> $nr0 = $row0["FOUND_ROWS()"];  //Number of rows found without LIMIT in 
> action
> ?>

As mentioned above, I run a plain simple select query and increase a counter 
while looping through the results returned. May not be as elegant and 
efficient, but works reliably. I just don't gtee away from thinking that 
SELECT SQL_CALC_FOUND_ROWS * FROM tr_test_record WHERE $access = tr_access 
doesn't return what you expect it should (as far as I understand it thsi 
already counts the rows that would be returned when running the query without 
SQL_CALC_FOUND_ROWS). Plug that into the query browser and see what happens. 
My uneducated guss is that you basically count how many row counts (not 
rows!!!) there were in the last query, which should always be 1. But then 
again, you say it works on Windoze....


David



More information about the talk mailing list