moxio/sqlite-extended-api

暴露了PHP中不可用的SQLite API

v0.4.0 2022-06-16 10:47 UTC

This package is auto-updated.

Last update: 2024-09-20 19:19:52 UTC


README

Latest Stable Version Buy us a tree

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。有兴趣加入我们棒棒哒团队吗?请查看我们的职位空缺(荷兰语)。