inferno-code/opendbal

OpenDBAL是Doctrine DBAL的替代品。

0.5.2 2020-12-15 18:29 UTC

This package is auto-updated.

Last update: 2024-09-16 03:07:04 UTC


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 ]
	]
*/