dawidgorecki / dbal
PHP 数据库抽象层(DBAL)
v2.1.0
2018-10-03 12:25 UTC
Requires
- php: >=7.1.0
- ext-pdo: *
README
PHP 数据库抽象库,具有 ActiveRecord 功能。它基于 PDO 扩展。
要求
- PHP 7.1.0+
- PDO 驱动程序
- 启用的扩展:pdo_pgsql 和/或 pdo_mysql
安装
通过 Composer 安装是推荐的安装方式。将以下行添加到您的 composer.json 文件中
"dawidgorecki/dbal": "~2.0"
或运行
composer require dawidgorecki/dbal
使用
配置
use Reven\DBAL\Configuration\DBConfig; use Reven\DBAL\Configuration\DSN; $dsn = new DSN(DSN::DRIVER_PGSQL, 'my_db'); // $dsn = new DSN(DSN::DRIVER_MYSQL, 'my_db', 'localhost', DSN::PORT_MYSQL); $config = new DBConfig($dsn, 'username', 'passwd'); // $config = new DBConfig($dsn, 'username', 'passwd', 'utf8', true);
获取连接和 DBAL 实例
使用连接管理器
use Reven\DBAL\ConnectionManager; use Reven\DBAL\DBALDatabase; use Reven\DBAL\Exceptions\DBALException; try { ConnectionManager::createConnection($config); // ConnectionManager::createConnection($config1, 'db1', PDO::FETCH_ASSOC); // ConnectionManager::createConnection($config2, 'db2', PDO::FETCH_OBJ); } catch (DBALException $e) { die($e); } $dbal = new DBALDatabase(ConnectionManager::getConnection()); // $dbal = new DBALDatabase(ConnectionManager::getConnection('db1'));
使用数据库工厂
use Reven\DBAL\DatabaseFactory; use Reven\DBAL\DBALDatabase; use Reven\DBAL\Exceptions\DBALException; try { $pdo = DatabaseFactory::getConnection($config, PDO::FETCH_ASSOC); } catch (DBALException $e) { die($e); } $dbal = new DBALDatabase($pdo);
错误 & 异常
您可以通过在对象构造函数中将第二个参数设置为 false 来关闭 DBALDatabase 抛出的所有异常。
$dbal = new DBALDatabase($pdo, false);
获取错误信息和查询字符串
$dbal->getLastError(); $dbal->getQueryString();
DBAL API
getPDO()
返回一个表示数据库连接的 PDO 实例
$dbal->getPDO();
startTransaction()
初始化一个事务(关闭自动提交模式)
$dbal->startTransaction();
commit()
提交事务,将数据库连接返回到自动提交模式
$dbal->commit();
rollback()
回滚当前事务
$dbal->rollback();
fetchAll()
返回查询结果的全部行
$users = $dbal->fetchAll("SELECT * FROM users"); /* Array ( [0] => Array ( [id] => 1 [name] => Dawid [age] => 31 ) ) */
fetchFirst()
返回查询结果的第一行
$user = $dbal->fetchFirst("SELECT * FROM users ORDER BY id", [], PDO::FETCH_ASSOC); /* Array ( [id] => 1 [name] => Dawid [age] => 31 ) */
fetchArray()
以数字索引数组的形式返回查询结果的第一行
$user = $dbal->fetchArray("SELECT * FROM users ORDER BY id"); /* Array ( [0] => 1 [1] => Dawid [2] => 31 ) */
fetchAssoc()
以关联数组的形式返回查询结果的第一行
$user = $dbal->fetchAssoc("SELECT * FROM users WHERE name = ?", ["Dawid"]); /* Array ( [id] => 1 [name] => Dawid [age] => 31 ) */
fetchColumn()
从查询结果的第一行返回单个列
$user = $dbal->fetchColumn("SELECT * FROM users WHERE id = ?", [1], 1); // Dawid
delete()
删除给定表中的行
$dbal->delete('users', ["id" => 1]); $dbal->delete('users', ["name" => "Dawid"]);
insert()
将行插入给定表
$dbal->insert('users', ["name" => "John", "age" => 35]);
update()
更新给定表中的行
$dbal->update('users', ["name" => "New John", "age" => 40], ["id" => 15]);
executeQuery()
执行带有给定 SQL 和参数的预处理语句,并返回 PDOStatement 实例
$stmt = $dbal->executeQuery("SELECT * FROM users"); while ($user = $stmt->fetchObject()) { print_r($user); } /* stdClass Object ( [id] => 1 [name] => Dawid [age] => 31 ) stdClass Object ( [id] => 15 [name] => New John [age] => 40 ) */
updateQuery()
执行带有给定 SQL 和参数的预处理语句,并返回受影响的行数
$rows_affected = $dbal->updateQuery("DELETE FROM users WHERE name = ?", ["New John"]);
prepare()
准备给定的 SQL 语句并返回 PDOStatement 实例
$stmt = $dbal->prepare("SELECT * FROM users WHERE name LIKE 'D%'"); $stmt->execute(); while ($user = $stmt->fetch(PDO::FETCH_NUM)) { print_r($user); } /* Array ( [0] => 1 [1] => Dawid [2] => 31 ) Array ( [0] => 12 [1] => Dominik [2] => 1 ) */
quote()
为查询中的使用引用字符串
$quoted = $dbal->quote("Hello", PDO::PARAM_STR);
lastId()
返回最后插入行的 ID
$last_id = $dbal->lastId();
ActiveRecord
模型私有属性应与数据库表中的列名相同。
命名约定
数据库表- 单词间使用下划线分隔的复数形式(例如,user_details)模型类- 单数形式,每个单词的首字母大写(例如,UserDetail)
使用
通过 Reven\DBAL\ActiveRecord 扩展您的模型类
<?php namespace Reven\DBAL; class User extends ActiveRecord { }
创建数据库连接
ConnectionManager::createConnection($config, 'active_record');
设置连接名称(如果非默认)
User::setConnectionName('active_record');
更改默认数据库表(可选)
User::setTableName('employers');
基本 CRUD
创建
要在数据库中创建新记录(例如,添加新用户),我们实例化一个新对象,然后调用 save() 方法。
// INSERT INTO users(name,email) VALUES('John','john@gmail.com') $user = new User(); $user->setName("John"); $user->setEmail("john@gmail.com"); $user->save();
读取
这些是您查找和检索数据库记录的基本方法。
// SELECT * FROM users WHERE id=1 LIMIT 1 $user = User::findById(1); echo $user->getName(); // SELECT * FROM users $users = User::findAll(); foreach ($users as $user) { echo $user->getName(); } // SELECT * FROM users WHERE email='john@gmail.com' $users = User::findByQuery("SELECT * FROM users WHERE email=:email", [":email" => "john@gmail.com"]); echo $users[0]->getName();
更新
要更新,您只需先找到记录,然后更改其中一个属性。
// UPDATE users SET name='Edwin' WHERE id=1 $user = User::findById(1); $user->setName("Edwin"); $user->save();
删除
这将调用 SQL 查询以删除数据库中的记录。
// DELETE FROM users WHERE id=1 $user = User::findById(1); $user->delete();
许可证
根据 MIT 许可证授权。 (https://open-source.org.cn/licenses/MIT)