我有一个网页(我们称其为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 即使更新在页面上进行了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top