I am trying to build a page that uses jQuery to call a database every second and return the highest numbered row.
The jQuery code is below (this is in $(‘document’).ready)
var id = 0;
$.post('check.php', 'id=0', function(data){
id = parseInt(data);
$('h1').text(data);
});
var timer = setInterval(function() {
$.post('check.php', 'id=' + id, function(data){
if (data != '')
$('h1').text(data)
else
$('h1').text("NOTHING!");
id = parseInt(data);
});
}, 1000);
And the PHP file, check.php, has the following code (after connecting to the database):
$id = $_POST['id'] - 1;
$query = "SELECT * FROM testtable WHERE 'id' > $id ORDER BY id DESC";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo "$row[0]";
When ‘id’ is the first column.
The highest row number right now is 13. I would expect it to send 13 to the PHP file. $id would then be 12, so it would select all rows with id values higher than 12, returning the row with id value 13. Then it would echo “13”, which is sent back to jQuery, which is parsed to an integer, making id equal to 13. Then 13 is sent to the PHP file again a minute later, and the process cycles.
What’s actually happening is that it’s alternating between displaying “13” and “NOTHING!”, and I can’t figure out why.
Because
select * from tesstable where id > 13will always be an empty result if 13 is the highestid. What you want is this:select max(id) as id from testtableYou don’t have to send back
$id, and if it’s got an index on it, this query will return very quickly.Also, your original query has the column
idin quotes, not backticks. You’re comparing the string “id” with your variable$id. To top that off, you’re susceptible to SQL injection here, so usemysql_escape_string, PDO, or remove the variable reference altogether using themaxquery provided.