2012-01-06 10 views
7

Primero, quiero informar sobre el caso para evitar el malentendido.¿Cómo cargar la extensión sqlite en PDO?

Por extensión sqlite, menciono la extensión de Sqlite como FTS, no la extensión sqlite de PHP.

He estado utilizando PDO Sqlite en mi aplicación, no se puede cambiar.

Como vi here, las extensiones SQLite, se pueden cargar como consulta verse a continuación:

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

Nota: mifuncion es el método de myextension

Pero cuando pruebo con esta consulta de DOP, se devuelva el mensaje "no autorizado".

Sólo para fines de prueba, he intentado PHP's Sqlite3 extension a cargar la extensión utilizando el código de abajo:

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

Funciona

Como sé que DOP SQLite hasnot un método como loadExtension para cargar las extensiones

¿Alguna idea de cómo puedo manejar esto?

+0

Usted debe agregar el código de cómo se conecta a la base de datos SQLite y que muestra cómo el fuego del SELECT load' consulta. – hakre

+0

¿Dónde ocurre el error? ¿Al cargar la extensión o al llamar a 'myfunction'? –

+0

Al cargar la extensión – WebolizeR

Respuesta

6

no pudo encontrar un indicador de compilador y lo hemos resuelto con un rápido y sucio hackeo en la extensión pdo_sqlite. parcheó sqlite_driver.c con sqlite3_enable_load_extension() de 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); 
    } 

Espero que esto ayude ...

Cuestiones relacionadas