【问题标题】:PHP and SQLite Service in Memory内存中的 PHP 和 SQLite 服务
【发布时间】:2019-06-01 20:13:48
【问题描述】:

我有一个单页响应式 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 加载并留在内存中以响应表单提交?好像每次提交都会重新加载。

【问题讨论】:

  • 是的,但你需要 Redis 或 Memcache,PHP 本身无法做到这一点,因为它不会在请求之间共享内存,在处理请求后一切都会被破坏。但是,如果您要设置 Redis / Memchace,我认为迁移到 MySQL 会更容易。对于这种基本的 SQL 查询,使用普通的 MySQL / MariaDB 不会有任何性能问题。

标签: php performance sqlite form-submit


【解决方案1】:

根据数据表的大小,您可以将其保存在 SESSION 上,使用诸如 shmop_open/shmop_write/shmop_read 之类的函数,或者(更好)使用一些缓存服务,如 redis,但以一种或另一种方式,数据将被存储和处理每次经过那个地方。我会将页面分成几部分,创建一个 web 服务来处理表单发布,另一个来显示表单。

最简单(不一定是最安全或最好的方法)是...... 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();
}

希望我能有所帮助。干杯!

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 2023-03-15
    • 2011-09-02
    • 2011-07-21
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多