techwilk / database
一个简单的 PDO/MySQLi/SQLite 包装器,使执行 SQL 查询更加容易
1.0.1
2024-07-08 19:32 UTC
Requires (Dev)
- ext-mysqli: *
- friendsofphp/php-cs-fixer: ^3.16
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2024-09-30 20:56:13 UTC
README
一个围绕 PDO/MySqli/SQLite 的轻量级包装器,具有一致的接口,并包含辅助函数以快速轻松地构建和运行查询。
对于选择语句和其他复杂查询,您应编写原始参数化 SQL,使用“问号”语法。
安装
- 通过 composer 安装(
composer require techwilk/database
) - 为 PDO / MySqli / SQLite 创建数据库实例
use TechWilk\Database\MySqli\MySqliDatabase;
$database = new MySqliDatabase(
'localhost',
'database-name',
'username',
'password',
);
选择
可用函数
query
runQuery
示例
无运行时参数
$result = $database->query('SELECT * FROM `users`');
$rows = $result->fetchAll();
var_dump($rows);
带运行时参数
$parameters = [1];
$result = $database->query('SELECT * FROM `users` WHERE id = ?', $parameters);
$row = $result->fetch();
var_dump($row);
代码库中其他地方生成的查询
function customQueryBuilder() {
$parameters = [1];
$query = new Query(
'SELECT * FROM `users` WHERE id = ?',
$parameters,
);
return $query;
}
$query = customQueryBuilder();
$result = $database->runQuery($query);
$row = $result->fetch();
var_dump($row);
插入
可用函数
insert
insertOnDuplicate
query
runQuery
创建新的简单记录
$data = [
'id' => 3,
'name' => 'Tim Jones',
'auth_id' => 'xxx123yyy',
'date_created' => '2022-03-03 00:00:00',
];
$id = $database->insert('users', $data);
var_dump($id);
创建并处理潜在的关键字冲突
$data = [
'name' => 'admin', // unique key
'uses_count' => 1,
];
$onDuplicate = [
'uses_count +' => 1, // += 1
];
$id = $database->insertOnDuplicate('tags', $data, $onDuplicate);
var_dump($id);
复杂的跨表插入
$sql = 'INSERT INTO users (`id`, `name`, `auth_id`, `date_created`) VALUES (?, ?, ?, ?)'
$parameters = [
3, // id
'Tim Jones', // name
'xxx123yyy', // auth_id
'2022-03-03 00:00:00', // date_created
];
$id = $database->query($sql, $parameters);
var_dump($id);
更新
可用函数
update
updateUsingIn
updateChanges
selectAndUpdate
query
runQuery
$data = [
'name' => 'Timothy Jones',
];
$rowCount = $database->update('users', $data, ['id' => 3]);
var_dump($rowCount);
删除
可用函数
delete
deleteUsingIn
query
runQuery
$rowCount = $database->delete('table', ['id' => 3]);
var_dump($rowCount);
测试
- 将
phpunit.xml.dist
复制到phpunit.xml
- 填写环境详细信息
- 运行
composer test
测试环境
- 需要每个可用数据库的副本
MySQL
创建 podman 网络 database-tests
使用 podman exec -it database-percona mysql -uroot -p
- mysql>
CREATE DATABASE tests;
- mysql>
`
CREATE USERtests
@%
IDENTIFIED BY 'create-random-password-here';`
- mysql>
`
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON tests.* TOtests
@%
;`
- mysql>
FLUSH PRIVILEGES;
mysql>
exit
确保您记下数据库公开的端口(使用
podman ps
)。这很可能是一个很大的数字,例如44449