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

时间:2018-02-09 22:42:32

标签: php dll sqlite sqlite-json1

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

所以我根据这些instructions编译了一个新的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 php_sqlite3.dll文件夹中的/ext替换为上面创建的文件夹。

1 个答案:

答案 0 :(得分:1)

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或其他东西)。