首先,我想通知案件,以避免误解.
通过sqlite扩展,我提到了Sqlite的扩展,如FTS,而不是PHP的sqlite扩展.
我一直在我的应用程序中使用PDO Sqlite,它无法更改.
正如我在这里看到的,可以加载Sqlite扩展,如下所示:
SELECT load_extension('xyz.so');
$db = new PDO ( 'sqlite:qwert.db' );
$db->query("SELECT load_extension('myextension.so');");
$db->query("SELECT myfunction(name) FROM table");
$rows = $db->fetchAll(PDO::FETCH_CLASS, 'stdClass');
Run Code Online (Sandbox Code Playgroud)
注意:myfunction是myextension的方法
但是,当我使用PDO中的此查询进行测试时,它会返回" 未授权 "消息.
仅出于测试目的,我尝试使用PHP的Sqlite3扩展来使用以下代码加载扩展:
$db = new SQLite3('qwer.db');
$db->loadExtension('xyz.so');
Run Code Online (Sandbox Code Playgroud)
有用
据我所知,PDO Sqlite没有像loadExtension这样的方法来加载扩展
知道怎么处理这个?
小智 7
找不到编译器标志,我们已经用pdo_sqlite扩展中的quick'n脏黑客解决了它.使用sqlite3 API中的sqlite3_enable_load_extension()修补了sqlite_driver.c.
--- php-5.3.7.old/ext/pdo_sqlite/sqlite_driver.c 2012-01-06 11:04:44.000000000 -0500
+++ sqlite_driver.c 2012-01-06 08:16:58.000000000 -0500
@@ -718,6 +718,8 @@
goto cleanup;
}
+ sqlite3_enable_load_extension(H->db, 1);
+
if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) {
sqlite3_set_authorizer(H->db, authorizer, NULL);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
2665 次 |
| 最近记录: |