First, I want to inform about the case to avoid the misunderstanding.
By sqlite extension, I mention Sqlite's extension like FTS, not PHP's sqlite extension.
I have been using PDO Sqlite in my application, it cannot be changed.
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');
Note: myfunction is method of myextension
But when I test with this query from PDO, it return "not authorized" message.
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');
It works
As I know that PDO Sqlite hasnot a method like loadExtension for loading extensions
Any idea how can I handle this?
PDO (PHP Data Objects) abstracts database access and enables you to create code that can handle different types of databases. One of the database types that PDO supports is SQLite.
PDO_SQLITE is a driver that implements the PHP Data Objects (PDO) interface to enable access to SQLite 3 databases. Note: PDO_SQLITE allows using strings apart from streams together with PDO::PARAM_LOB .
I have implemented a library with a solution for this problem for PHP 7.4+ which does not involve recompiling the PDO driver. In short, it uses PHP's FFI extension and Z-Engine (which reads PHP's internal memory structures using FFI) to make a direct call to the SQLite C API. You can find more detailed background information in this blog post. I would not recommend this solution in production yet, but it could be a feasible workaround for test or development workflows.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With