数据库
1. 使用
1.1. 配置
在 App 的配置中指定配置,如:
return [
'DB.connection'=> 'mysql:dbname=testdb;host=127.0.0.1',
'DB.username'=> 'dbuser',
'DB.password'=> 'dbpassword',
'DB.options' => []
];
1.2. 创建数据库连接实例
可通过依赖注入,获取数据库连接实例。如:
use PhpBoot\DB\DB;
class Books
{
public function __construct(DB $db)
{
$this->db = $db;
}
...
}
1.3. 多个数据库
有的时候,应用可能需要连接多个数据库。下面将展示如果给 Books 类单独指定数据库连接。
return [
'Books.DB.connection'=> 'mysql:dbname=testdb;host=127.0.0.1',
'Books.DB.username'=> 'dbuser',
'Books.DB.password'=> 'dbpassword',
'Books.DB.options' => []
'Books.DB'=> \DI\factory([DB::class, 'connect'])
->parameter('dsn', \DI\get('Books.DB.connection'))
->parameter('username', \DI\get('Books.DB.username'))
->parameter('password', \DI\get('Books.DB.password'))
->parameter('options', \DI\get('Books.DB.options')),
Books::class=>DI\object()
->constructorParameter('db', \DI\get('Books.DB')),
];
2. 语法
2.1. SELECT
$res = $db->select('a, b')
->from('table')
->leftJoin('table1')->on('table.id=table1.id')
->where('a=?',1)
->groupBy('b')->having('sum(b)=?', 2)
->orderBy('c', Sql::$ORDER_BY_ASC)
->limit(0,1)
->forUpdate()->of('d')
->get();
2.2. UPDATE
$rows = $db->update('table')
->set('a', 1)
->where('b=?', 2)
->orderBy('c', Sql::$ORDER_BY_ASC)
->limit(1)
->exec()
->rows
2.3. INSERT
$newId = $db->insertInto('table')
->values(['a'=>1])
->exec()
->lastInsertId()
2.4. DELETE
$rows = $db->deleteFrom('table')
->where('b=?', 2)
->exec()
->rows
2.5. 存储过程
$db->transaction(
function(DB $db){
$db->...;
}
);