farenholz / pdo-database-bundle
此包已被弃用且不再维护。未建议替代包。
Symfony3 扩展,提供 PDO 连接而不使用 doctrine
0.0.2
2018-01-02 14:28 UTC
Requires
- php: >=7.0.0
- symfony/framework-bundle: >=2.8
Requires (Dev)
- codeception/codeception: ^2.3
This package is auto-updated.
Last update: 2022-02-01 13:11:39 UTC
README
用途
Doctrine 很棒。这是事实。但对于某些用例,例如当您尝试连接到某种大型、现有的数据库时,Doctrine 生成巨大的开销。在这些情况下,仅使用某种类型的 PDO 连接可能很有用,这正是此包的作用。
主要特性
- 通过 PDO 连接到 mysql、sqlite 或 sybase 数据库
- 选择使用预处理语句或直接执行查询
- 将查询及其执行时间记录到 symfony 分析器中
没有实体,没有仓库。这只是一个连接。
安装
composer require fahrenholz/pdo-database-bundle
配置
sybase:
driver: "dblib"
host: "~"
port: 2000
dbname: "~"
user: "~"
password: "~"
charset: UTF8
mysql:
driver: "mysql"
host: "~"
port: 3306
dbname: "~"
user: "~"
password: "~"
charset: UTF8
sqlite:
driver: "sqlite"
path: "/path/to/my/db.sqlite"
user: ""
password: ""
使用
$connection = $this->get('fahrenholz_pdo_database.connections')->get('mysql');
$mySQL = "SELECT * FROM my_table WHERE parameter1 = :parameter1 AND parameter2 = :parameter2";
//build and execute prepared statement
$result = $connection->execute(
$mySQL,
[
":parameter1" => $myParameter,
":parameter2" => $myParameterTwo,
]
);
//execute query without prepared statements
$result = $connection->executeSimple(
$mySQL,
[
":parameter1" => $myParameter,
":parameter2" => $myParameterTwo,
]
);
//get all results as objects
$allRows = $result->getAll(Collection::GET_OBJ);
//get all results as sequential arrays
$allRows = $result->getAll(Collection::GET_ARRAY);
//get all results as associative arrays
$allRows = $result->getAll(Collection::GET_ASSOC);
//reset counter
$result->resetCounter();
//execute something on each result
for ($i=0; $i<$result->getRowCount();$i++) {
$res = $result->get(Collection::GET_OBJ);
//do something
}
//get the SQL generated for a query
$connection->getSQL(
$mySQL,
[
":parameter1" => $myParameter,
":parameter2" => $myParameterTwo,
]
);
测试
MySQL 连接性和 SQLite 连接性以及所有通用类都通过单元测试进行了良好覆盖。
composer install
./vendor/bin/codecept run
sybase 连接性也得到了良好测试,但针对的是无法通过公共 gitlab 账户公开的专有数据库。您必须相信我或创建自己的测试。每个新的连接都必须通过实现 ConnectionTestInterface 的连接测试类进行测试,以确保一致性。
贡献
请随时贡献。以下仍为待办事项
- pgsql 连接性
- mssql 连接性
- oracle 连接性