tags:

views:

425

answers:

3
$result = $db_con->query("SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 0,10");

$count_result = $db_con->query("SELECT FOUND_ROWS() as totalcount");
$row = $count_result->fetch_assoc();
$total = $row['totalcount'];

$total keeps returning 0 even though the $result contains all the user rows in it.

ini_set("mysql.trace_mode", "0");

I found out about this setting via searching a similar Q on here, but it did not resolve my issue.

When I use the 2 select statements in my MySQL client it always outputs the right count. Just can't seem to figure out how to get it working on my php page.

PHP Version: 5.2.5 build 6 MySQL Version: 5.1.30

Note: The code I provided here is not being used on my actual project, however, it does exemplify the problem I am having with not being able to retrieve the total count. This code, from what I've read about found_rows(), should work but it doesn't.

A: 

I'm not sure what database library you're using but it looks like you are trying to count the number of rows in a select statement in php from a mysql database.

Have you tried seeing if it works with the built in mysql database functions in php?

$count_result = mysql_query("SELECT COUNT(*) as totalcount FROM users");
$row = mysql_fetch_array($count_result);

$total = $row['totalcount'];
Charles Ma
-1 : does not answer the original question about LIMIT, and FOUND_ROWS()
gahooa
A: 

LIMIT is required to make found_rows() work correctly

Add a LIMIT to the end of your query, ie.

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 0,10;

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

FOUND_ROWS() -- For a SELECT with a LIMIT clause, the number of rows that would be returned were there no LIMIT clause

gahooa
Even with the limit clause I get 0 for totalcount.
Seth
+1  A: 

On php.net I found someone with maybe the same problem. He is speaking of a race condition that could occur: php.net. Basically he solves this problem by temporary locking the table at the cost of slowing things down.

merkuro
I found that post when I was googling. I guess I'll go back to using count(*).
Seth