2

我想JSON1在 PHP7 中尝试 SQLite 的扩展,但默认情况下未启用。

因此,我按照这些说明php_sqlite3.dll编译了一个启用了扩展的新版本,但是当我尝试启动 PHP 时出现错误;JSON1

Warning: PHP Startup: Invalid library (maybe not a PHP library) 'sqlite3'
in Unknown on line 0

我究竟做错了什么?


更多信息

替换php_sqlite3.dll为我的版本后,SQLite3该类不再适用于 PHP,例如。这行 PHP 代码;

$cn = new SQLite3(':memory:');

给出这个错误;

Fatal error: Uncaught Error: Class 'SQLite3' not found

我通过做来编译新php_sqlite3.dll的;

gcc -g -shared -DSQLITE_ENABLE_JSON1 sqlite3.c -o php_sqlite3.dll

然后我用上面创建的文件夹替换php_sqlite3.dll了我的 Windows PHP文件夹。/ext

4

1 回答 1

2

php_sqlite3.dll库是一个用php编写的库,包装了SQLite数据库库。

要使用 JSON1 SQLite 扩展,您需要将扩展​​编译为独立的可加载库,并load_extension()在运行时使用 SQL 函数加载扩展。

$db = new SQLite3('mysqlitedb.db');
$db->exec('load_extension('json1.dll');');

或者,您可以像这样从 php 调用它:

$db = new SQLite3('mysqlitedb.db');
$db->loadExtension('json1.dll');

看来您已经知道如何编译 C 源文件了,所以我不再赘述。

编辑我的错误。

要编译 json 扩展,请使用

gcc -g -shared json1.c sqlite3ext.h -o json1.dll

并确保json1.csqlite3ext.h文件都在同一个目录中。我从您的示例中假设您正在使用与 Windows 兼容的 GNU 编译器(MinGW 或其他东西)。

于 2018-02-09T22:52:45.377 回答