使用 PHP SQLite 的 Nginx 抛出错误

Nginx with PHP usage of SQLite throws error

我在 trafex/php-nginx docker 中使用 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

我正在使用 docker 文件来安装 sqlite 包:

FROM trafex/php-nginx:latest

USER root
RUN apk add php8-pdo_sqlite

USER nobody

并且在 PHPInfo 中我可以看到包已加载:

有人知道吗?

SQLite 包含在 PHP 中,您必须在 php.ini 文件中取消注释。但首先你必须卸载你安装的那个,否则 PHP 会抱怨有两个。我遇到了同样的问题,尽管不在 Docker 容器内。 PHP 同意安装了 SQLite,但 CLI 不会使用它。

你的包是错误的,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 class),你将必须安装包 php8-sqlite3 而不是 php8-pdo_sqlite3

apk add php8-sqlite3

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