如何在PDO中加载sqlite扩展? [英] How to load sqlite extension in PDO?

查看:324
本文介绍了如何在PDO中加载sqlite扩展?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我想告知此案,以避免造成误会.

First, I want to inform about the case to avoid the misunderstanding.

通过sqlite扩展,我提到了像FTS这样的Sqlite扩展,而不是PHP的sqlite扩展.

By sqlite extension, I mention Sqlite's extension like FTS, not PHP's sqlite extension.

我一直在应用程序中使用PDO Sqlite,无法更改.

I have been using PDO Sqlite in my application, it cannot be changed.

正如我在此处看到的那样,Sqlite扩展可以作为查询加载,如下所示:

As I saw here, Sqlite extensions can be loaded as query seen below:

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');

注意:myfunction是myextension的方法

但是当我从PDO对该查询进行测试时,它会返回"未授权"消息.

But when I test with this query from PDO, it return "not authorized" message.

仅出于测试目的,我尝试 PHP的Sqlite3扩展进行加载通过使用以下代码扩展:

For only testing purpose, I tried PHP's Sqlite3 extension to load the extension by using the code below:

$db = new SQLite3('qwer.db');
$db->loadExtension('xyz.so');

有效

我知道PDO Sqlite没有像loadExtension这样的方法来加载扩展

As I know that PDO Sqlite hasnot a method like loadExtension for loading extensions

任何想法我该如何处理?

Any idea how can I handle this?

推荐答案

找不到编译器标志,我们已通过pdo_sqlite扩展中的quick'ndirty hack解决了该问题.使用来自sqlite3 API的sqlite3_enable_load_extension()修补了sqlite_driver.c.

could not find a compiler flag and we have solved it with a quick'n dirty hack in pdo_sqlite extension. patched sqlite_driver.c with sqlite3_enable_load_extension() from sqlite3 API.

--- 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);
    }

希望这对您有帮助...

Hope this helps...

这篇关于如何在PDO中加载sqlite扩展?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆