【发布时间】: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(正确的做法)。但即使使用固定值,我也很挣扎。
我怀疑这是我搞砸了的简单而愚蠢的事情,但如果我看到它,我会被诅咒。
【问题讨论】: