Как загрузить расширение sqlite в PDO? - PullRequest
10 голосов
/ 06 января 2012

Во-первых, я хочу сообщить о деле, чтобы избежать недоразумений.

Под расширением sqlite я упоминаю расширение Sqlite, такое как FTS, а не расширение sqlite в PHP.

Я использовал PDOSqlite в моем приложении, его нельзя изменить.

Как я видел здесь , расширения 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');

Примечание: myfunction - это метод myextension

Но когда я тестирую этот запрос из PDO, он возвращает сообщение " не авторизовано ".

Только для целей тестирования,Я попытался расширение PHP Sqlite3 , чтобы загрузить расширение, используя следующий код:

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

Это работает

Поскольку я знаю, что в PDO Sqlite нет такого метода, как loadExtension длязагрузка расширений

Есть идеи, как с этим справиться?

1 Ответ

7 голосов
/ 06 января 2012

не удалось найти флаг компилятора, и мы решили его с помощью быстрого взлома расширения pdo_sqlite. исправлен sqlite_driver.c с sqlite3_enable_load_extension () из 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);
    }

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...