我有一个单页面响应HTML页面。页面的一部分包含产品搜索。用户可以在表单中输入搜索条件并返回结果。结果是分页显示的。
<form id="filterform" name="filterform" method="post" action="./loaddata.php">
...
</form>表单由Ajax提交,结果以HTML片段的形式返回,并动态插入到DOM中以刷新结果。
这一切工作正常,但有时loaddata.php的结果非常慢,通常是第一次从页面调用。
在loaddata.php中,我使用的是Sqlite3数据库。它是只读的。类似于以下内容:
$filename = "../datafile.sqlite3";
$db = new SQLite3($filename);
$q = "SELECT distinct productId, title, price, name FROM datatable LIMIT 16";
$results = $db->query($q);
while ($row = $results->fetchArray()) {
echo "<h1>Results</h1>";
}
$db->close();有没有办法让loaddata.php加载并留在内存中以响应表单提交?似乎每次提交都会重新加载。
发布于 2019-06-02 05:12:51
根据数据表的大小,您可以将其保存在会话中,使用shmop_open/shmop_write/shmop_read这样的函数,或者(最好是)使用一些缓存服务,比如redis,但在某种程度上,每次您经过那个地方时,数据都会被存储和处理。我会将页面分成几个部分,创建一个and服务来处理表单post,另一个来显示表单。
最简单的(不一定是最安全或最好的)方法是……PS:我假设您正在使用PDO,并且(显然)下面的代码是一个详细说明,它实际上不会工作
if (isset($_SESSION['db_datatable'])) {
foreach ($_SESSION['db_datatable'] AS $item) {
echo "<h1>".$item['some_row']."</h1>";
}
} else {
$filename = "../datafile.sqlite3";
$db = new SQLite3($filename);
$q = "SELECT distinct productId, title, price, name FROM datatable LIMIT 16";
$results = $db->query($q);
while ($row = $results->fetchArray()) {
$_SESSION['db_datatable'][] = $row;
echo "<h1>Results</h1>";
}
$db->close();
}希望我能帮上忙。干杯!
https://stackoverflow.com/questions/56410113
复制相似问题