如何在PHP中为`SQLite3`启用`JSON1`扩展?

如何在PHP中为`SQLite3`启用`JSON1`扩展?,php,dll,sqlite,sqlite-json1,Php,Dll,Sqlite,Sqlite Json1,我想在PHP7中尝试SQLite的扩展,但默认情况下它没有启用 因此,我编译了一个新的php_sqlite3.dll,并根据这些启用了JSON1扩展,但当我尝试启动php时,我得到了一个错误 Warning: PHP Startup: Invalid library (maybe not a PHP library) 'sqlite3' in Unknown on line 0 我做错了什么 进一步资料 用我的版本替换php_sqlite3.dll后,sqlite3类在php中不再工作,例如

我想在PHP7中尝试SQLite的扩展,但默认情况下它没有启用

因此,我编译了一个新的
php_sqlite3.dll
,并根据这些启用了
JSON1
扩展,但当我尝试启动php时,我得到了一个错误

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

然后我用上面创建的文件夹替换了Windows php
/ext
文件夹中的
php\u sqlite3.dll

php\u sqlite3.dll库是用php编写的一个库,它封装了SQLite数据库库

要使用JSON1 SQLite扩展,需要将扩展编译为一个独立的可加载库,并使用
load\u 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.c
sqlite3ext.h
文件位于同一目录中。根据您的示例,我假设您使用的是与Windows兼容的GNU编译器(MinGW或其他东西)。

所以我不需要替换
php\u sqlite3.dll
?相反,我应该创建一个只包含JSON1扩展的DLL,然后在PHP运行时将其添加到
PHP.ini
?不,您只需在PHP中调用
sqlite3::loadExtension
函数即可。我正在努力解决如何制作
JSON1.DLL
。我在SQLite网站上发现了一个
json1.c
,但是当我试图通过执行
gcc-shared json1.c-o json1.dll来编译它时,我得到了错误
json1.c:26:24:致命错误:sqlite3ext.h:没有文件或目录
。很好,我将进行编辑以显示编译。但是,您显示您正在使用gcc进行编译,但您正在创建一个
.dll
文件,而不是
.so
文件。你是想在Linux还是Windows上这样做?我正在使用Windows。