基本使用

数据库虽然只是功能驱动的一种,但是数据库也是使用最频繁的功能之一,相对比较重要,所以用单独的章节来介绍。

数据库驱动

驱动 描述
Mysqli 基于php mysqli扩展,支持一些特有的mysql方法
Mysql 基于php pdo_mysql扩展
Pgsql 基于php pdo_pgsql扩展(粗略测试)
Sqlite 基于php pdo_sqlite扩展(粗略测试)
Sqlsrv 在win系统下使用pdo_sqlsrv扩展,类unix系统下使用pdo_odbc扩展(无环境,未测试)
Oracle 基于php pdo_oci扩展(无环境,未测试)
Cluster 基于Mysqli,支持设置多个数据库服务器,实现读写分离主从分离,原理是根据SQL的SELECT INSERT等语句将请求分配到不同的服务器。(无环境,未测试)

配置示例

return [
'mysqli' => [
'driver' => 'mysqli',
// 服务器地址
'host' => '127.0.0.1',
//(可选配置) 服务器 端口
'port' => 3306,
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库名
'dbname' => 'test',
// 数据库字符集
'charset' => 'utf8',
// (可选配置)数据库socket地址
//'socket' => null
],
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
//'port' => 3306,
'username' => 'root',
'password' => '',
'dbname' => 'test',
'charset' => 'utf8',
//'socket' => null
],
'sqlite' => [
'driver' => 'sqlite',
'database' => '/home/qiujin/sqlite/test',
'username' => '',
'password' => '',
],
'pgsql' => [
'driver' => 'pgsql',
'host' => '127.0.0.1',
'username' => 'postgres',
'password' => '',
'dbname' => 'test',
'charset' => 'utf8'
],
'cluster' => [
'driver' => 'cluster',
// 读服务器地址
'read' => array_rand([
'127.0.0.2',
'127.0.0.3',
'127.0.0.4',
]),
// 写服务器地址
'write' => '127.0.0.1',
//'port' => 3306,
'username' => 'root',
'password' => '',
'dbname' => 'test',
'charset' => 'utf8'
],
];

数据库实例

数据库实例有2种调用方式

// 参数为空时会默认取第一个实例配置mysqli
db()->table->get($id);
// 用参数指定配置实例
db('sqlite')->table->get($id);
class Demo
{
use \Getter;
// 配置getter providers,这里使用了别名配置
protected $providers = [
'sqlite' => 'db.sqlite',
];
public function test()
{
// 使用db驱动类的同名的关键字db,会默认取驱动配置的第一个实例mysqli
$this->db->table->get($id);
// 指定别名sqlite到驱动配置的sqlite实例
$this->sqlite->table->get($id);
}
}


其它驱动也可以使用同样的方式生成调用方式实例

使用SQL

执行一条SQL,并返回结果

INSERT:返回插入纪录的insertId,如果没有insertId则返回true

UPDATE:返回更新的行数affectedRows

DELETE:返回删除的行数affectedRows

SELECT:返回获取的所有数据fetchAll

// 执行一条SQL查询,并返回查询数据
$db->exec("SELECT * FROM `user` WHERE `id` = ?", [$id]);

执行一条SQL,返回query由后续方法处理结果,如fetch fetchRow fetchAll numRows affectedRows insertId等方法

// 执行一条SQL请求,并循环游标获取数据
$query = $db->query("SELECT * FROM `user`");
while ($user = $db->fetch($query)) {
$users[] = $user;
}

事务处理