我正在尝试构建一个页面,该页面使用jQuery每秒调用一个数据库,并返回编号最高的行。
jQuery代码如下(这是在$('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);
PHP文件check.PHP有以下代码(连接到数据库后):
$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]";
当"id"是第一列时
目前最高的行号是13。我希望它将13发送到PHP文件$id将是12,因此它将选择id值大于12的所有行,返回id值为13的行。然后它将回显"13",并将其发送回jQuery,jQuery被解析为一个整数,使id等于13。然后13在一分钟后再次发送到PHP文件,并且过程循环。
实际情况是,它在显示"13"one_answers"什么都没有!"之间交替,我不明白为什么。
因为如果13是最高的id
,则select * from tesstable where id > 13
将始终为空结果。你想要的是:
select max(id) as id from testtable
您不必发回$id
,如果它有一个索引,这个查询会很快返回。
此外,原始查询的列id
包含引号,而不是反引号。您正在将字符串"id"与变量$id
进行比较。最重要的是,您在这里容易受到SQL注入的影响,所以使用mysql_escape_string
、PDO,或者使用提供的max
查询完全删除变量引用。
我建议你这样做。试试看。看看它是否有效。
var id = 0,count = 0;
$.post('check.php', {id:0}, function(data){
id = +data["rows"]; // Try parse or just a +
$('h1').text(data);
count++;
},"json");
var timer = setInterval(function() {
$.post('check.php', {id:id-count}, function(data){
if (data["rows"] != null || data["rows"] != "")
$('h1').text(data)
else
$('h1').text("NOTHING!");
id = +data["rows"];
count++;
},"json");
}, 1000);
$id = $_POST['id'];
$queryString = ($id == 0) ? "'id' > $id" : "'id' = $id";
$query = "SELECT * FROM testtable WHERE $queryString ORDER BY id DESC";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
echo json_encode(array("rows" => "$row[0]");