cache-control与mysqli-> Actaided_rows混乱
-
11-10-2019 - |
题
我有一个网页(我们称其为a.html)。 A.html具有一些JavaScript,该JavaScript使用简单的 document.location =“ b.php”. 。 B.PHP根据其看到的cookie运行mySQL查询,并根据mySqli-> Adgeted_rows变量返回结果。但是,即使MySQL表确实会按照应有的方式更改,即使在MySqli-> Actioned_rows上,页面都等于0。有趣的是,当我使用URL栏(或刷新页面)直接进入b.php时,mysqli-> affected_rows是1,就像应该的那样。
查看Wireshark,两个获取请求之间的唯一区别是第二个(非JavaScript)一个与 缓存控制:max-age = 0. 。有人知道为什么这会影响任何事情,如果有办法可以解决这个问题?
编辑:Heres的代码
$req = $mysqli->prepare('update users set sts=NOW() where i=? and sid=? and sip=? and NOW()-sts <= '.$authentication_timeout.';');
if ($mysqli->error) {
log_mysql_error($mysqli);
die('Unexpected error:'.$mysqli->error);
}
$req->bind_param('sss',$uid,$sid,$_SERVER['REMOTE_ADDR']);
$req->execute();
print $mysqli->affected_rows;
$req->close();
解决方案 3
根本不是缓存的问题。出现问题是因为在此特定情况下,在执行此代码之前正在更新同一行,并且现在没有足够的时间延迟()不同。因此,当行匹配时,数据没有变化,因此$ mysqli-> Adgeted_rows仍然等于零。 $ mysqli->信息显示“行匹配:1,行更改:0”。
其他提示
如果确实是缓存使您的啤酒酸化,那么我想这样做
document.location="B.php?nocache=" + new Date().getTime();
将解决问题。您可以检查并验证是否是吗?
您没有显示任何代码,所以我只能猜测,但是 affected_rows()
将在不更改表中任何内容的更新中返回null。因此,据推测,如果您重新加载页面,第二个负载将显示 0
即使更新在页面上进行了。
不隶属于 StackOverflow