docnet/php-dbal

一个库,将mysqli包装成一组流畅、易于使用的类。

v2.3.1 2022-12-21 13:51 UTC

This package is not auto-updated.

Last update: 2024-09-24 07:17:07 UTC


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');

所以现在,$fooFoo 类的实例

带有参数和结果类的选择

执行后,$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() 返回最后一个插入ID
  • update()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()