首页 > 解决方案 > 使用 PHP 使用 SQLite 的 Nginx 抛出错误

问题描述

我在 docker 中使用 nginx,trafex/php-nginx 但我没有让 SQLite 工作。以下php代码

<?php
$db = new SQLite3('/var/private/anmeldungen.db');
$db->close();

抛出此错误[error] 9#9: *33 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class "SQLite3" not found in /var/www/html/phpinfo.php:3

我正在使用 dockerfile 来安装 sqlite 包:

FROM trafex/php-nginx:latest

USER root
RUN apk add php8-pdo_sqlite

USER nobody

在 PHPInfo 中,我可以看到包已加载: phpinfo 第 1 部分 phpinfo 第 2 部分

有人有想法吗?

标签: phpdockersqlitenginxalpine

解决方案


你的包是错误的,PDO 是 PHP 数据对象,它是一个更高层,旨在能够与任何较低的数据库协议(如 SQLite、MySQL、Postgres ......)一起工作,因此从长远来看,通过 PDO 实现可能会对你有很大帮助你想切换到另一个数据库而不改变你的源代码太多(可能有一些不兼容的功能但不多)。

要通过 PDO 初始化 SQLite,您必须这样做:

$dbh = new PDO('sqlite:/tmp/foo.db');

您可以在此处阅读更多相关信息https://www.php.net/manual/en/ref.pdo-sqlite.php

如果你想坚持使用原生 SQLite(使用你的 SQLite3 类),你必须安装包php8-sqlite3而不是php8-pdo_sqlite3

apk add php8-sqlite3

这将适用于您当前的代码。


推荐阅读