amxm / db
Requires (Dev)
- phpunit/phpunit: ^10.1
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 与数据库交互。其方法允许轻松查询数据库和操作数据,其缓存功能通过减少数据库查询次数来提高性能。