504 在 PHP 中执行 SQLite SELECT 和更新时网关超时



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

我有许多页面以不同的方式愉快地选择、更新、插入和删除数据库值。但是,当我从表中选择一些数据然后直接更新它时,我在一个特定的 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(良好实践(。但即使有固定的值,我也在挣扎。

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

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

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

最新更新