2012-01-06 92 views
7

首先,我想通知案件以避免误解。如何在PDO中加载sqlite扩展?

通过sqlite扩展,我提到Sqlite的扩展像FTS,而不是PHP的sqlite扩展。

我一直在我的应用程序中使用PDO 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'); 

注:

当我看到here,SQLite的扩展可以作为查询如下所示加载myFunction是的myextension

方法,但是,当我与PDO,它这个查询测试返回“未授权”消息。

仅用于测试目的,我试图PHP's Sqlite3 extension使用下面的代码加载扩展:

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

它的工作原理

正如我知道PDO SQLite的hasnot加载扩展

像loadExtension的方法

任何想法如何处理?

+0

如何连接到SQLite数据库,并且告诉您如何火'选择load'查询您应该添加代码。 – hakre 2012-01-06 10:09:17

+0

错误在哪里发生?加载扩展名或调用'myfunction'时? – 2012-01-06 11:43:36

+0

加载扩展时 – WebolizeR 2012-01-06 11:55:46

回答

6

找不到编译器标志,我们用pdo_sqlite扩展中的quick'n dirty hack解决了它。使用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); 
    } 

希望这有助于...