docnet / php-dbal
一个库,将mysqli包装成一组流畅、易于使用的类。
v2.3.1
2022-12-21 13:51 UTC
Requires
- php: >=5.4.0
- ext-mysqli: *
README
设计用于将mysqli包装成一系列快速、安全且易于使用的类。
使用Composer安装
要求如下行
"docnet/php-dbal": "v2.1"
让我们连接
在您进行任何其他操作之前,您需要连接到数据库...
<?php $settings = new \Docnet\DB\ConnectionSettings('127.0.0.1', 'root', 'password', 'dbname'); $db = new \Docnet\DB($settings);
对于以下示例,我们将假设存在一个活动的数据库对象。
我的第一个SELECT
执行此操作后,$records
将是一个包含 stdClass
对象的数组 - 稍后我们将了解如何更改结果类。
<?php $records = $db->fetchAll("SELECT * FROM tblData");
选择一条记录
执行此操作后,$record
将是一个stdClass对象。
<?php $record = $db->fetchOne("SELECT * FROM tblData WHERE intKey = ?", 84);
结果类
如果我们传递一个可选的第三个参数,我们将返回该类的对象
<?php $foo = $db->fetchOne("SELECT * FROM tblData WHERE intKey = ?", 84, 'Foo');
所以现在,$foo
是 Foo
类的实例
带有参数和结果类的选择
执行后,$records
是一个包含(命名空间)\Docnet\Bar
对象的数组,其中 intKey > 3 且 vchName = Barry
<?php $records = $db->prepare("SELECT * FROM tblData WHERE intKey > ?id AND vchName = ?name") ->bindInt('id', 3) ->bindString('name', 'Barry') ->setResultClass('\\Docnet\\Bar') ->fetchAll();
prepare()
方法返回一个流畅的 Statement
类,该类提供了命名参数绑定。
参数绑定为您处理所有转义和引号。
INSERT、UPDATE、DELETE
插入、更新和删除操作(也称为DML查询)与fetch
方法的工作方式完全相同。
<?php $binds = array(1, 'foo'); $db->insert("INSERT INTO tblData (intField1, vchField2) VALUES (?, ?)", $binds);
返回值
insert()
返回最后一个插入IDupdate()
和delete()
返回受影响的行数
重新执行预定义语句
对于SELECT
<?php $stmt = $db->prepare("SELECT * FROM tblData WHERE intKey = ?id"); $stmt->bindInt('id', 4)->fetchOne(); $stmt->bindInt('id', 5)->fetchOne();
或者,更常见的是,INSERT - 这可以比运行多个INSERT查询有更高的性能,因为服务器只需解释一次SQL字符串。
<?php $stmt = $db->prepare("INSERT INTO tblPeople VALUES (?name"); $stmt->bindString('name', 'Tom')->insert(); $stmt->bindString('name', 'Dick')->insert(); $stmt->bindString('name', 'Harry')->insert();
任意SQL
如果您真的需要,可以像这样运行任意查询
<?php $db->query("TRUNCATE tblTransient");
绑定
绑定很棒。它允许DBAL处理 转义和引号。
有许多不同的支持绑定方法(可能太多,但我希望保持灵活性)。
简写,单个标量值
<?php $db->fetchOne("SELECT * FROM tblData WHERE intKey = ?", 84);
简写参数数组 - 参数序列必须与您的查询匹配
<?php $db->fetchOne("SELECT * FROM tblData WHERE intKey = ? AND vchName = ?", array(84, 'Tom'));
简写命名参数数组 - 任何序列,类型自动检测
<?php $params = array('name' => 'Tom', 'id' => 84); $db->fetchOne("SELECT * FROM tblData WHERE intKey = ?id AND vchName = ?name", $params);
长格式、类型化、命名绑定 - 流畅的,任何序列
<?php $db->prepare("SELECT * FROM tblData WHERE intKey = ?id AND vchName = ?name") ->bindString('name', 'Dick') ->bindInt('id', 4) ->fetchOne();
长格式、类型提示、命名绑定 - 流畅的,任何序列
<?php $db->prepare("SELECT * FROM tblData WHERE intKey = ?int_id AND vchName = ?str_name") ->bind('str_name', 'Dick') ->bind('int_id', 4) ->fetchOne();
公共方法
DB类
以下方法可用
fetchOne()
fetchAll()
insert()
update()
delete()
- 当调用时返回新的
Statement
对象的prepare()
query()
escape()
- 支持事务的
begin()
- 支持事务的
commit()
- 支持事务的
rollback()
Statement类
SELECT
fetchOne()
fetchAll()
setResultClass()
DML
insert()
update()
delete()
绑定
bind()
bindInt()
bindString()
bindDouble()
bindBlob()
执行后
getInsertId()
getAffectedRows()