MySQL 选择 * 不是最新的


mysql select * is not up to date

我在表中遇到了有关SQL实体的问题。

我有 2 个 PHP 脚本,一个向表添加新项目,另一个获取所有项目并将它们作为 JSON 返回。

返回

脚本需要一些时间来返回实际条目。我的意思是,如果我在表中添加或删除条目,我的返回脚本在删除/添加条目之前仍然会显示我的条目。一段时间后,它得到了正确的结果,但我无法解释为什么。

这是我的返回代码:

$con = new mysqli($servername, $username, $password, $dbname);
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"Einkaufsliste");
$sql="SELECT * FROM Einkaufsliste";
$result = $con->query($sql);
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $rows[] = $row;
}
$items = array();
foreach($rows as $row){
    $row_array['item'] = $row['item'];
    array_push($items, $row_array);
}
echo json_encode($items);
/*echo "bla";*/
$con->close();

因此,如果我的表中有 3 个项目并添加一个,我的返回值仍然是 3。如果我通过 phpmyadmin 检查我的数据库,则有 4 个条目。

我忘了提到这是我通过 JSCRIPT 提取结果的方式

function showItems() {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            //document.getElementById("test").innerHTML = xmlhttp.responseText;
            //alert(xmlhttp.responseText);
            document.getElementById("itemList").innerHTML = "";
            var res = JSON.parse(xmlhttp.responseText);
            alert(res);
            for(var k = 0; k < res.length; k++){
                $('#itemList').append('<li><a href="#">'+res[k].item+'</a><a class="deleteMe"></a></li>').listview('refresh');
            }
        }
    };
    xmlhttp.open("GET","getItems.php",true);
    xmlhttp.send();
}

在输出 ajax 响应的页面中添加无缓存标头:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

或者在 ajax 调用中添加一个带有时间戳的参数,以便每个请求都被视为唯一并单独缓存,从而产生您关闭缓存的错觉:

var d = new Date();
xmlhttp.open("GET", "getItems.php?t="+d.getTime(), true);

或两者兼而有之。