我想在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
替换为上面创建的文件夹。
答案 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.c
和sqlite3ext.h
文件位于同一目录中。我假设您使用的是Windows兼容的GNU编译器(MinGW或其他东西)。