inferno-code / opendbal
OpenDBAL是Doctrine DBAL的替代品。
README
OpenDBAL是Doctrine DBAL的替代品。它更轻量,并保证未来版本中API的向后兼容性。
特性
- 记录查询和错误
- 可以抛出异常或在静默模式下工作
- 稳定的PDO-like API,具有更舒适的方法
未来计划
- 单元测试
- API文档
- 添加对CSV/TSV数据流的支持,以用于数据集的导入/导出。
简介
DBAL - 数据库抽象层与访问层在PDO-like API周围提供了一个轻量级且薄的运行时层。
OpenDBAL通过使用与现有PDO API非常相似的接口来抽象具体的PDO API,这使得实现可能使用现有原生或自行制作的API的自定义驱动程序成为可能。
数据检索和操作
OpenDBAL非常接近PDO API。如果您之前使用过PDO,您会很快熟悉OpenDBAL。
首先开始连接
$url = "pgsql://username:password@host:port/dbname"; $conn = new \OpenDBAL\PDO\Connection($url);
编写一个SQL查询并将其传递给连接的query()方法
$statement = $conn->query("SELECT * FROM clients");
查询方法执行SQL并返回一个数据库语句对象。数据库语句对象可以迭代以检索所有与查询匹配的行,直到没有更多行
while (($row = $statement->fetchAssoc()) !== null) process($row);
执行查询并将所有结果放入数组中
$clients = $conn->fetchAllAssoc("SELECT * FROM clients"); /* [ [ 'email' => 'a.deker@gmail.com', 'name' => 'Alan Deker', 'age' => 35 ], [ 'email' => 'liza@hotmail.com', 'name' => 'Elizabeth Brown', 'age' => 27 ], ] */
您可以使用许多不同方法来检索结果,以获取舒适的数据结构。例如,作为数组
$clients = $conn->fetchAllArray("SELECT * FROM clients"); /* [ [ 'a.deker@gmail.com', 'Alan Deker', 35 ], [ 'liza@hotmail.com', 'Elizabeth Brown', 27 ], ] */
或者作为对象
$clients = $conn->fetchAllObject("SELECT * FROM clients"); /* [ (object) [ 'email' => 'a.deker@gmail.com', 'name' => 'Alan Deker', 'age' => 35 ], (object) [ 'email' => 'liza@hotmail.com', 'name' => 'Elizabeth Brown', 'age' => 27 ], ] */
或者获取单列的值
$email = $conn->fetchColumn( "SELECT email FROM clients WHERE id = :clientId LIMIT 1", [ 'clientId' => 123 ] ); /* 'a.deker@gmail.com' */
以关联数组的形式检索数据,其中键表示第一列或指定的列,值是其余列及其值的关联数组
$clients = $conn->fetchAllDictAssoc("SELECT email, name FROM clients"); /* [ 'a.deker@gmail.com' => 'Alan Deker', 'liza@hotmail.com' => 'Elizabeth Brown' ] */ $clients = $conn->fetchAllDictAssoc("SELECT email, name, age FROM clients"); /* [ 'a.deker@gmail.com' => [ 'name' => 'Alan Deker', 'age' => 35 ], 'liza@hotmail.com' => [ 'name' => 'Elizabeth Brown', 'age' => 27 ] ] */
OpenDBAL称之为字典。获取相同的字典,但将行作为数组获取
$clients = $conn->fetchAllDictArray("SELECT email, name, age FROM clients"); /* [ 'a.deker@gmail.com' => [ 'Alan Deker', 35 ], 'liza@hotmail.com' => [ 'Elizabeth Brown', 27 ] ] */
或者作为对象
$clients = $conn->fetchAllDictObject("SELECT email, name, age FROM clients"); /* [ 'a.deker@gmail.com' => (object) [ 'name' => 'Alan Deker', 'age' => 35 ], 'liza@hotmail.com' => (object) [ 'name' => 'Elizabeth Brown', 'age' => 27 ] ] */