eufony / dbal
零配置可扩展的PHP数据库抽象层库。
Requires
- php: ^8.1
- ext-pdo: *
- eufony/cache: ^0.4.0
- psr/log: ^1.0 || ^2.0 || ^3.0
- psr/simple-cache: ^1.0
Requires (Dev)
- fakerphp/faker: ^1.16
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.5
Suggests
- eufony/dbal-driver-implementation: Virtual package for database driver implementations.
- monolog/monolog: Well-maintained and popular logging library.
- psr/cache-implementation: Virtual package for PSR-6 caching implementations.
- psr/log-implementation: Virtual package for PSR-3 logging implementations.
- psr/simple-cache-implementation: Virutal package for PSR-16 caching implementations.
Provides
- eufony/dbal-driver-implemtation: *
- psr/log-implementation: ^1.0 || ^2.0 || ^3.0
This package is auto-updated.
Last update: 2024-09-13 10:51:45 UTC
README
eufony/dbal 为 SQL 提供了一个抽象层,以简化使用关系数据库管理系统的开发,并防止锁定到特定的 SQL 味道。
eufony/dbal 是一个 PHP 库,用于处理与您选择的数据库的接口。它使用一个表达式的语法,然后即时将其转换为适合您的 SQL 味道的语法。使用它,您将享受到纯 SQL 的所有好处,加上
- PSR-3 兼容的数据库事件日志记录。
- 使用任何 PSR-6 或 PSR-16 兼容的缓存实现进行查询结果的透明缓存。
- 使用预处理语句轻松防止 SQL 注入攻击。
- 轻松序列化和反序列化任何有效的 PHP 类型。
感兴趣吗? 这里是开始的方法。
常见问题解答
为什么不直接编写自己的 SQL 查询呢?
普通 SQL 的问题是,“SQL”不幸地并不指代单一的东西。相反,它有不同的“味道”,每种都有其语法和功能支持的细微差别。没有人编写“SQL”查询。您总是必须针对特定的味道。
“好吧,如果我只使用 SQL 标准中的函数和语法会怎样?”
尽管 ANSI 和 ISO 都有这样一个 SQL “标准”,但在尝试编写符合该标准的查询时,您会迅速面临两个问题
-
一些非常基本的功能,例如 MySQL 的
LIMIT
和OFFSET
关键字的功能,在标准指令集中神秘地缺失。在这种情况下,您被迫以试图达到相同结果的方式修改您的查询,或者放弃,只针对特定的味道,这可能会(将)导致以后的移植问题。 -
不同的 SQL 味道在遵守标准方面存在极大的差异。虽然 PostgreSQL 和 SQLite 在很大程度上是兼容的(至少在核心标准上,不考虑各种扩展),但您仍会遇到一些细微的差异,以非常微妙的方式破坏事情,否则可能不会被注意到。试图考虑这些差异将给开发带来重大开销,并通常会使后端基础设施的工作变得不具吸引力。
eufony/dbal 为您解决这些问题。作为一个抽象层,作为开发者的您无需担心输出端的语法。如果您想迁移版本,只需切换到任何现成的驱动实现;或者,如果不存在,可以贡献并创建自己的。此外,您在从PHP与数据库交互时还能享受到一些便利,例如透明日志记录、缓存和PHP与SQL数据类型之间的转换。
为什么不用一个更成熟的项目呢?
因为将关键基础设施托付给未经测试、无资金支持的崭新项目既有趣又刺激!
更严肃地说,eufony/dbal 最初是作为 eufony/orm 的姐妹项目启动的,eufony/orm 是一个旨在用创新实用方法重新思考关系数据库模型劣势的 对象关系映射 库。在早期开发中得出结论,没有在SQL之上建立抽象层,支持多种SQL版本是不切实际的。
因此,项目被分为两部分,其中 eufony/orm 提供顶层,而 eufony/dbal 提供底层,这与其他流行的项目如 Doctrine ORM 相似。然而,与 Doctrine 项目不同的是,eufony/dbal 还尝试为查询构建器创建一种表达性语法,因为它们是最终用户(您)可能会与之交互的内容。
入门
安装
eufony/dbal 以 Packagist 包的形式发布,可以通过 Composer 简单安装:
composer require "eufony/dbal:v1.x-dev"
警告:此包目前还没有任何稳定版本(甚至没有 v0.x 预发布版)并且目前是 不稳定 的。请预期会频繁出现破坏性变更和不稳定性!
基本用法
有关更详细的文档,请参阅此处。
eufony/dbal 是一个“零配置”库,让您快速开始。只需定义一个新的数据库连接(可选)并给它一个名称,如下所示
$driver = /* ... */; $database = new Connection($driver, key: "default");
驱动可以是任何驱动接口的实现。开箱即用,eufony/dbal 支持 PostgreSQL、MySQL 和 SQLite
// PostgreSQL $postgres = new PostgreSQLDriver($dsn, $user, $password); // MySQL $mysql = new MySQLDriver($dsn, $user, $password); // SQLite $sqlite = new SQLiteDriver($path); // $path can also be `:memory:` for an ephemeral database
所有三个驱动程序都在底层使用 PHP PDO 扩展。
一旦您的连接被激活,您就可以立即开始构建并发送查询到数据库
// Define the query $query = Select::from("users"); // You can also extend the query using loops, conditional logic, etc. if ($fetch_ids_only) { $query = $query->fields(["id"]); } // Generate the query string and send it to the database for execution $users = $query->execute();
您可以在此处找到查询示例列表。
贡献
发现了错误或缺失的功能?在 问题跟踪器 中报告。
许可协议
本程序是自由软件:您可以按照自由软件基金会发布的 GNU 较小通用公共许可证的条款重新分发和/或修改它,许可证版本为 3 或(根据您的选择)任何后续版本。
本程序的分发是出于希望它能对您有用,但没有任何保证;甚至没有关于适销性或特定用途的暗示保证。有关详细信息,请参阅 GNU 较小通用公共许可证。
您应该已经收到了与该程序一起的GNU通用公共许可协议的副本。如果没有,请参阅https://gnu.ac.cn/licenses/。