amxm/db

DbAdapters

0.62 2024-04-26 04:49 UTC

This package is auto-updated.

Last update: 2024-09-26 05:50:00 UTC


README

PDOAdapter 类是一个实现了 DbInterface 接口,提供与数据库交互方法集的类。该类使用 PDO 库连接数据库并执行查询。以下是该类及其方法的概述

类: PDOAdapter 属性

$db: 代表数据库连接的 PDO 类实例。

$cache: 用于缓存查询结果的缓存对象。 (此缓存对象兼容 PSR-16,例如 Memcached)

方法

__construct(PDO $db, $cache = false) 构造方法,用于初始化类属性。第一个参数是 PDO 对象,第二个参数是可选的缓存对象(PSR-16 兼容)。

$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'username', 'password');
$db = new PDOAdapter($pdo, $memcached);

cache($timeout) 设置缓存超时值并返回对象实例。

$db->cache(86400)->rows("SELECT * FROM articles ORDER BY date DESC LIMIT 10");

query(string $sql, array $vars = array()) 使用给定的参数执行给定的 SQL 查询,并返回一个语句对象。

row(string $sql, array $vars = array()) 使用给定的参数执行给定的 SQL 查询,并返回结果集的第一行作为关联数组。

$article = $db->row("SELECT * FROM articles WHERE id=?", [$id]);

rows(string $sql, array $vars = array()) 使用给定的参数执行给定的 SQL 查询,并返回结果集的所有行作为关联数组数组。

$articles = $db->rows("SELECT * FROM articles WHERE status=?", ['OK']);

col(string $sql, array $vars = array()) 使用给定的参数执行给定的 SQL 查询,并返回结果集第一行的第一列。

$maxId = $db->col("SELECT max(id) FROM articles");

insert($table, $data) 将一行数据插入给定的表,并返回最后插入的 ID。

 $insertId = $db->insert('articles', [
        'title' => 'All you need is love',
        'status' => 'OK',
        'date' => $db->now(),
        'created_at' => $db->func('NOW()'),
    ]);

insertUpdate($table, $data, $updateData = null) insertUpdate 方法允许在指定的表中插入一行新数据。如果发生唯一键冲突(例如,唯一索引中的值重复),则该方法根据提供的数据更新表中的现有行。如果未提供 $updateData 且发生键冲突,则数据将从 $data 更新。

要确定数据是否已更新或是否添加了新记录,您可以使用 $db->rowCount():如果返回 1,则添加了新记录;如果返回 2,则更新了现有记录。此行为与 PDO 的默认行为一致。

$insertId = $db->insertUpdate('articles', [
        'title' => 'All you need is love',
        'status' => 'OK',
        'date' => $db->now(),
        'created_at' => $db->func('NOW()'),
    ], ['updated_at' => $db->func('NOW()')]);

insertIgnore($table, $data)

为 $db->insert($table, $data, ['ignore' => true]) 的别名;

replace($table, $data)

为 $db->insert($table, $data, ['replace' => true]) 的别名;

update($table, $data, $where, $vars) 使用给定的数据和变量更新给定表中的一行,并返回受影响的行数。

$db->update('articles', [
        'status' => 'BAD',
        'updated_at' => $db->now()
    ], 'id=?', [5]);

func($mysqlFunction) 返回一个表示要在查询中使用的 MySQL 函数的对象。

$ins = ['created_at' => $db->func('NOW()')];
$ins = ['created_at' => $db->func('NOW() + INTERVAL 1 DAY')];

now() 返回当前日期和时间,格式为 "Y-m-d H:i:s"。它提供了一个简单的方法来替换 MySQL 函数 NOW(),另一种变体是使用 $db->func('NOW()')

$ins = ['created_at' => $db->now()];

fetch() 返回结果集的最后获取的行作为关联数组。

$db->query("SELECT * from articles WHERE status=?",['OK']);
while($row = $db->fetch()){
	$row['text'] = $db->row("SELECT text FROM articles_text WHERE id=?", $row['id']);
	if ($row['id']>100) break;
}

总的来说,PDOAdapter 类提供了一种简单灵活的方式,通过 PDO 与数据库交互。其方法允许轻松查询数据库和操作数据,其缓存功能通过减少数据库查询次数来提高性能。