moxio / sqlite-extended-api
暴露了PHP中不可用的SQLite API
Requires
- php: ^7.4 || ^8.0
- ext-ffi: *
- lisachenko/z-engine: ^0.8.0 || ^0.9.1
Requires (Dev)
- phpunit/phpunit: ^9.1
README
moxio/sqlite-extended-api
暴露了PHP中不可用的SQLite API。您可以使用PHP的PDO
扩展像通常一样连接到SQLite数据库,然后使用这个库调用PDO
不提供的SQLite API方法(例如,加载扩展)。
警告:在底层,这个库使用了Z-Engine,它声称直到1.0.0版本才准备好用于生产。使用它存在风险。
要求
此库需要PHP版本7.4或更高版本,并启用了FFI扩展。它仅适用于x64非线程安全的PHP构建。
安装
使用composer作为依赖项安装
$ composer require moxio/sqlite-extended-api
用法
如果您已有一个连接到SQLite数据库的现有PDO
连接,您可以使用Facade
类的静态方法wrapPDO()
来获取对额外SQLite API的访问权限
<?php use Moxio\SQLiteExtendedAPI\Facade; // Existing PDO connection $pdo = new \PDO('sqlite::memory:'); // Wrap it using this library $wrapped_connection = Facade::wrapPDO($pdo); // Call extended APIs on the wrapped connection object $wrapped_connection->loadExtension('mod_spatialite.so');
下一节将介绍包装连接上可用的方法。
暴露的API
以下是一个简要概述;有关详细信息,请参阅WrappedConnection
。
加载SQLite扩展
使用loadExtension($shared_library)
加载额外的SQLite扩展库
$wrapped_connection->loadExtension('mod_spatialite.so');
这对应于PHP的SQLite3扩展中的loadExtension
方法,或者SQLite C接口中的sqlite3_load_extension
。如果扩展成功加载,则返回`true`,否则返回`false`。
获取数据库文件名
要获取连接到的数据库的完整磁盘路径,请使用getDatabaseFilename()
var_dump($wrapped_connection->getDatabaseFilename());
对于内存数据库,此函数返回空字符串。
这是如何工作的?
简而言之:我们使用了Z-Engine项目,该项目由Alexander Lisachenko创建,以及PHP的Foreign Function Interface (FFI)来将您的PHP变量解析为SQLite C API的原始连接指针,然后使用FFI调用该C API。
更多详细信息可以在这篇博客文章中找到。
版本控制
本项目遵循语义版本控制。
贡献
欢迎对该项目做出贡献。如果您想在PHP中使用其他SQLite API,请随时发送PR或提出功能请求。
许可
本项目采用MIT许可协议发布。
捐赠
此软件包是Treeware。如果您在生产环境中使用它,那么我们非常希望您为世界种一棵树以感谢我们的工作。通过为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
由荷兰代尔夫特的Moxio团队用爱心、咖啡和乐趣制作。Moxio。有兴趣加入我们棒棒哒团队吗?请查看我们的职位空缺(荷兰语)。