elbucho / database
PDO子系统的实用包装器
Requires
- php: >=7.2
- ext-pdo: *
- doctrine/inflector: ^1.0
- elbucho/config: *
- pds/skeleton: ^1.0
Requires (Dev)
- phpunit/php-code-coverage: ^7.0
- phpunit/phpunit: ^8.5
README
此项目提供了一个针对MySQL的PDO请求的实用包装器。它允许您在单个可调用对象中懒加载多个不同的数据库连接,并提供对PDO方法的简化访问。
配置
通过传递一个包含一个或多个DSN的Elbucho\Config对象来实例化Database类。有关如何放置和读取配置文件的说明,请参阅elbucho/config文档。
DSNs
数据库连接必须存储在Config对象的"dsns"键中,每个连接都必须包含以下所需键。您可以在一个Config对象中包含多个连接。
每个数据库连接的所需键包括
- host => 这是主机名(例如,localhost)
- dbname => 您要连接的数据库的名称
- user => 您的数据库连接的用户名
- pass => 您的数据库连接的密码
此外,可以指定可选键"port",其中包含数据库服务器正在运行的端口号。默认为3306。
默认句柄
如果您的配置文件只包含一个数据库连接的信息,Database对象将为此连接设置句柄为"默认"。如果您有多个连接,每个连接都必须以该连接的句柄名称开头。
您可以通过在配置中指定'default_handle'键来覆盖默认句柄名称
default_handle: foobar
以下有两个示例.yml文件。第一个文件显示单个连接,它将自动分配默认句柄。
dsns:
host: localhost
port: 3307
dbname: app_data
user: app_user
pass: app_password
此.yml文件显示多个连接(例如,开发和生产数据库服务器)
dsns:
dev:
host: localhost
port: 3306
dbname: app_dev
user: dev_user
pass: dev_password
prod:
host: 10.20.1.101
port: 3308
dbname: app_prod
user: prod_user
pass: prod_password
这将创建两个句柄在$database对象中:"dev"和"prod"。
查询数据库
一旦设置了配置文件,您可以通过以下两种方式之一实例化数据库对象并查询它
$database->query()
此方法最多接受3个参数:您的查询本身、您希望传递给MySQL引擎的任何参数以及查询的句柄(默认为"默认")。它返回结果数组或抛出\PDOException,如果查询存在问题。
$database = new Database($config);
$results = $database->query('SELECT * FROM users`, [], 'prod');
foreach ($results as $user) {
...
}
$database->exec()
此方法与query()具有相同的3个参数,但不返回结果。它用于传递您不需要返回的命令给MySQL。
$database->exec('SET NAMES utf8mb4', [], 'prod');
$newUser = ['johnSmith', 'john.smith@company.org'];
$database->exec('INSERT INTO users (username, email) VALUES (?,?)', $newUser, 'prod');
获取最后一个插入ID
如果您刚刚在数据库中插入了一行或多行,可以通过输入以下内容来获取最后一个插入ID
$lastId = $database->getLastInsertId('prod');
var_dump($lastId);
// int(12345)
同样,如果省略了句柄,它将使用您设置的默认句柄。
获取前一个查询影响的行数
如果您刚刚在数据库中更新/插入/删除了一行或多行,可以使用以下方式获取受影响的行数
$rowCount = $database->getRows('prod');
var_dump($rowCount);
// int(23456)
类似于getLastInsertId(),如果省略了句柄,它将使用您设置的默认句柄。
设置属性
您可以通过setAttribute方法在给定的连接上设置PDO属性。这与PDO setAttribute方法的工作方式相同,只是还需要传递一个句柄。
$attribute = \PDO::ATTR_ERRMODE;
$value = \PDO::ERRMODE_EXCEPTION;
$handle = 'default';
$database->setAttribute($attribute, $value, $handle)