我正在尝试构建一个页面,该页面使用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,将其解析为整数,使id等于13.然后在一分钟后再将13发送到PHP文件,并且该过程循环。
实际发生的是它在显示“13”和“NOTHING!”之间交替显示,我无法弄清楚原因。
答案 0 :(得分:3)
如果13为最高select * from tesstable where id > 13
,则id
将始终为空结果。你想要的是这个:
select max(id) as id from testtable
您不必发回$id
,如果它上面有索引,此查询将很快返回。
此外,您的原始查询的引号中的列id
,而不是反引号。您将字符串“id”与变量$id
进行比较。最重要的是,您可以在此处使用SQL注入,因此请使用mysql_escape_string
,PDO或使用提供的max
查询完全删除变量引用。
答案 1 :(得分:0)
我建议你这样做。试试吧。并告诉它是否有效。
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]");