felixkiss/database

PDO 的简单包装器

v0.4.0 2014-04-30 10:25 UTC

This package is auto-updated.

Last update: 2024-08-29 04:08:34 UTC


README

Build Status

本项目是 PDO 类的一个薄包装器,允许在 PHP 中与数据库交互时编写更干净、更简洁的代码。

它不是为了成为 ORM,而是为了更好地编写手写的 SQL 语句。

安装

通过 composer 安装

$ composer require felixkiss/database:0.*

或直接编辑 composer.json

{
  "require": {
    "felixkiss/database": "0.*"
  }
}

然后运行 composer update

使用方法

实例化一个 Database 实例

require 'vendor/autoload.php';

use Felixkiss\Database\Database;

$pdo = new PDO('mysql:dbname=foo;host=127.0.0.1', 'foo', 'bar');
$db = new Database($pdo);

执行 SQL 语句

$db->execute('TRUNCATE some_table');

可以使用 execute 方法执行任何预处理语句。它接受一个可选的参数数组作为第二个参数。

SELECT

$user = $db->select('SELECT * FROM user');
foreach ($users as $user)
{
    // Do something ...
}

带编号参数

$users = $db->select('SELECT * FROM user WHERE age BETWEEN ? AND ?', [20, 40]);

带命名参数

$users = $db->select(
  'SELECT * FROM user WHERE age BETWEEN :young AND :old LIMIT 0, :limit', [
  ':young' => 20,
  ':old'   => 40,
  ':limit' => 10,
]);

获取一列的数组

$users = $db->lists('SELECT username FROM users');

这将返回一个扁平化的数组,例如

['felixkiss', 'foobar', ...]

获取单个值

$count = $db->pluck('SELECT COUNT(*) FROM users');

插入记录

$db->insert('users', [
    'username' => 'felixkiss',
    'location' => 'Vienna, Austria',
]);

更新记录

$db->update('users', [
  'location' => 'Toronto, Canada',
  ], 'WHERE username = ?', ["felixkiss"]
);

读写操作的不同连接

有时指定单独的读取(SELECT)和写入(INSERT、UPDATE、DELETE)连接可能会有用,例如在复制环境中。

$read = new PDO('mysql:dbname=foo;host=127.0.0.1', 'foo', 'bar');
$write = new PDO('mysql:dbname=foo;host=mirror.example.com', 'foo', 'bar');
$db = new Database($read, $write);

默认情况下,其他 SQL 语句(通过 execute())将在写入连接上调用,除非指定了第三个参数 $readOnly = true

$db->execute('TRUNCATE users'); // runs on write connection
$db->execute('LOCK TABLE users WRITE', [], true); // runs on read connection

许可证

MIT,请参阅 LICENSE.md