【问题标题】:504 Gateway time-out when conducting a SQLite SELECT and then an UPDATE in PHP在 PHP 中执行 SQLite SELECT 和 UPDATE 时出现 504 网关超时
【发布时间】:2018-06-25 03:21:09
【问题描述】:

我已经在 Raspberry Pi 上安装了 Raspbian Stretch,包括 PHP 7 和 SQLite 3。

我有许多页面以不同的方式愉快地处理 SELECT、UPDATE、INSERT 和 DELETE 数据库值。但是,当我从表中选择一些数据然后直接更新它时,我在一个特定的 PHP 页面上遇到了问题。

为了演示这个问题,我通过命令行在名为monitoring 的数据库中创建了一个名为testdb 的表。

CREATE TABLE IF NOT EXISTS testdb ('name' TEXT NOT NULL, 'color' TEXT, 'schedule' INTEGER NOT NULL);

然后我添加了一行随机值;

INSERT INTO testdb (name, color, schedule) VALUES ("testing","green",2);

导致 504 网关超时的示例 PHP 代码如下

<?php

// select a row in testdb
$db = new PDO('sqlite:/srv/monitoring/monitoring');
$stmt = $db->prepare("SELECT color FROM testdb WHERE name='testing';");
$stmt->execute();
$result = $stmt->fetch();
$db = null;
echo $result['color'];


// Update testdb
$db = new PDO('sqlite:/srv/monitoring/monitoring');
$sql =  "UPDATE testdb SET color = 'green', schedule = 2 WHERE name = 'testing'";
$stmt = $db -> prepare($sql);
$stmt -> execute();
$db = null;

?>

我可以自己运行 SELECT 块或 UPDATE 块,它们将起作用(我可以通过从命令行检查表来确认,因此数据库没有权限或访问问题)。但是,如果我尝试像正常页面一样加载页面,我会超时。

在生产代码中,我有动态使用的变量,因此使用了 PDO(正确的做法)。但即使使用固定值,我也很挣扎。

我怀疑这是我搞砸了的简单而愚蠢的事情,但如果我看到它,我会被诅咒。

【问题讨论】:

    标签: php sqlite


    【解决方案1】:

    好吧,我没有这个问题的答案,但代码现在可以在第二天运行。我只能假设问题与当时正在发生的事情有关。我假设它不是基于浏览器的,因为当超时发生时,其他页面无法访问数据库。 Raspberry Pi 未更新或重新启动。我很茫然。

    我确实在一夜之间想到我只需将代码组合成一个序列,该序列将选择然后更新,而不将每个块视为独立单元,但由于它有效,我保留了原始形式。很奇怪。

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2019-12-02
      • 2021-05-27
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 2013-05-20
      相关资源
      最近更新 更多