DB 类


DB 类为静态类。如果要创建实例可以使用Mysql 类创建
在BeaconPHP 中 需要配置和使用表名前缀。

配置文件格式如下:

#数据库配置文件,目前只支持mysql
return [
    'db_host' => '127.0.0.1',
    'db_port' => 3306,
    'db_name' => 'oooo',
    'db_user' => 'root',
    'db_pwd' => '123456',
    'db_prefix' => 'sl_', #表名前缀
    'db_charset' => 'utf8mb4',
];


在使用查询语句的时候 使用 @pf_ 来替代前缀
如 我们要查询表  sl_member 
sql 语句使用的表名是  @pf_member

DB::getList('select * from @pf_member order by id desc');


DB类的静态方法

exec(string $sql): false|int

执行 sql 语句,不返还任何结果,仅返回影响行数。
返回修改的行数,如果没有任何修改可能会返回 0 ,这个函数也会返回 false 可以参考 PDO::exec();

execute(string $sql, $args = null): false|\PDOStatement

执行sql 语句 并返回 \PDOStatement 结果集对象。
$sql 需要执行的字符串。
$args 占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。

#没有参数的情况
DB::execute('select * from @pf_member order by id desc');
#如果有1个参数,不需要数组包括起来。
DB::execute('select * from @pf_member where `type`= ? order by id desc',1);
#如果有多个参数
DB::execute('select * from @pf_member where `type`= ? and dateTime < ? order by id desc',[1,'2020-01-01 10:00:00']);

 

getList(string $sql, mixed $args = null, int $fetch_style = \PDO::FETCH_ASSOC): array

获取多行数据返回二维数组
$sql
需要执行的字符串。
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。

$fetch_style 与PDO的Fetch参数保持一致

#没有参数的情况
DB::getList('select * from @pf_member order by id desc');
#如果有1个参数,不需要数组包括起来。
DB::getList('select * from @pf_member where `type`= ? order by id desc',1);
#如果有多个参数
DB::getList('select * from @pf_member where `type`= ? and dateTime < ? order by id desc',[1,'2020-01-01 10:00:00']);

 

getRow(string $sql, mixed $args = null, int $fetch_style = \PDO::FETCH_ASSOC): mixed

返回1行数据,如果没有找到数据则返回 null。

$sql 需要执行的字符串。
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。

$fetch_style 与PDO的Fetch参数保持一致

#没有参数的情况
DB::getRow('select * from @pf_member order by id desc limit 0,1');
#如果有1个参数,不需要数组包括起来。
DB::getRow('select * from @pf_member where `id`= ? order by id desc',1);
#如果有多个参数
DB::getRow('select * from @pf_member where `id`= ? and dateTime < ? order by id desc',[1,'2020-01-01 10:00:00']);

 

getItem(string $table, int $id): ?array

通过id 直接获取一行数据。
$table 要查询的表
$id 
表id 值

DB::getItem('@pf_member',1);
#相当于
DB::getRow('select * from @pf_member where `id`= ?',1);

 

getOne(string $sql, mixed $args = null, ?string $field = null, mixed $def = null): mixed

获取一行中的1个字段值

 

$sql 需要执行的字符串。
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。
$field 要查询的字段,如果没有则返回第一个字段
$def 如果没有找到数据 使用该默认值

$name=DB::getOne('select name from @pf_member where id=?',1,'name:s','空');

 

getMax(string $tbname, string $field, string|int|null $where = null, mixed $args = null): mixed

查询最大值:
$tbname
表名
$field
字段名
$where
要查询的条件
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。

$sort = DB::getMax('@pf_news','sort','mode=?',1);

 

getMin(string $tbname, string $field, string|int|null $where = null, mixed $args = null): mixed

查询最小值
$tbname
表名
$field
字段名
$where
要查询的条件
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。

$sort = DB::getMax('@pf_news','sort','mode=? and pid=?',[1,3]);

 

insert(string $tbname, array $values = [])

插入数据

$tbname 需要插入的表
$values 和表结构对应的键值对。

DB::insert('@pf_news',['title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')]);
$id=DB::lastInsertId();

 

lastInsertId(?string $name = null): string

获取最后1次插入的id. 或者其他字段名
$name 
如果需要可以设置成其他字段名。

replace(string $tbname, array $values = [])

替换数据,数据字典中需要存在主键,如果主键存在则更新,如果不存在则插入。
$tbname 需要替换数据的表
$values 和表结构对应的键值对。

DB::replace('@pf_news',['id'=>3,'title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')]);

 

update(string $tbname, array $values, string|int|null $where = null, mixed $args = null)

更新数据
$tbname 需要更新数据的表
$values 和表结构对应的键值对。
$where 如果有条件,则可以书写条件,如果是整数 则直接更新id=这个整数
$args 如果 $where 不是整数 且有参数站位符,这里可以填写站位符。同样 只有1个数据则可直接填写,多个数据需要用数组包括起来。

DB::update('@pf_news',['title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')],'pid=? and id=?',[3,1]);
#如果$where 是整数
DB::update('@pf_news',['title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')],1);
#等价于
DB::update('@pf_news',['title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')],'id=?',1);

#原子更新,需要使用到 sql 代码片段
#如 update @pf_news set click=click+1 where id=1
DB::update('@pf_news',['click'=>DB::raw('click+?',1)],1);

 

raw(string $sql, mixed $args = null)

Sql 原义片段
在更新,或者添加时,需要对数据进行语句原义设置时需要。
$sql Sql片段字符串。
$args
占位符数据,如果只有1个数据则可直接填写,多个数据需要用数组包括起来。


delete(string $tbname, string|int|null $where = null, mixed $args = null)

删除数据记录
$tbname 需要删除数据的表
$where 如果有条件,则可以书写条件,如果是整数 则直接更新id=这个整数
$args 如果 $where 不是整数 且有参数站位符,这里可以填写站位符。同样 只有1个数据则可直接填写,多个数据需要用数组包括起来。

DB::delete('@pf_news','pid=? and kind=?',[3,1]);
#如果$where 是整数
DB::delete('@pf_news',1);
#等价于
DB::delete('@pf_news','id=?',1);

 

beginTransaction(): bool

开启事务

commit(): bool

提交事务

rollBack(): bool
回滚事务

 

inTransaction(): bool

是否在事务中


例如:

try{
 DB::beginTransaction();
 DB::update('@pf_news',['allow'=>1],3);
 DB::update('@pf_member',['news'=>DB::raw('`news`+?',1)],10);
 DB::commit();
}catch(\Exception $e){
 DB::rollBack();
}

 

getFields(string $tbname): array

获取表字段信息,返回所有字段名的数组
$tbname
表名
如:

$fields=DB::getFields('@pf_news')

 

fieldFilter(array $data, string $tbname): array

过滤 $data 键值对数组中,只保留 $tbname 表中含有的字段的键名。

 

existsField(string $tbname, string $field): bool

检查数据表中,字段是否存在
$tbname
表名
$field
待检查的字段名

createTable(string $tbname, array $options = [])

创建一个数据
$tbname 表名
$options 建表数据

$options['engine'] 数据引擎,默认是 InnoDB
$options['
charset'] 字符集,默认是 utf8
$options['
comment'] 表注释,默认为空

 

addField(string $tbname, string $field, array $options = []): false|int

添加一个字段
$tbname
表名
$field 字段名
$options
创建字段的选项
$options['type'字段类型,默认是 VARCHAR
$options['len'] 字符长度,
$options['
scale'] 小数点位数
$options['
comment'] 字段注释,默认为空

 

modifyField(string $tbname, string $field, array $options = []): false|int

修改字段,在同一个字段名上做参数修改

$tbname
表名
$field
字段名
$options
创建字段的选项
$options['type'
字段类型,默认是VARCHAR
$options['len']
字符长度,
$options['
scale']
小数点位数
$options['
comment']
字段注释,默认为空

updateField(string $tbname, string $oldField, string $newField, array $options = []): false|int

更新字段,字段名字会重命名。

$tbname 表名
$oldField
原来的字段名
$newField
新的字段名
$options
创建字段的选项
$options['type'
字段类型,默认是VARCHAR
$options['len']
字符长度,
$options['
scale']
小数点位数
$options['
comment']
字段注释,默认为空

dropField(string $tbname, string $field): false|int

删除表字段

$tbname 表名

$field字段名

existsTable(string $tbname): bool

检查表是否已经存在
$tbname 表名

dropTable(string $tbname): int|false

删除表
$tbname 表名

 

engine(): Mysql

获取默认Mysql实例

Mysql 类

Mysql类是可以实例化的类:

构造方法如下:

__construct(string $host, int $port = 3306, string $name = '', string $user = '', string $pass = '', string $prefix = '', string $charset = 'utf8', int $timeout = 120)


在默认情况下 我们一般使用静态DB类,DB类会启动默认实例。
但是一些情况下我们可能需要实例化一个数据库链接对象,
Mysql 的方法和DB类的方法参数是一致的。
只是需要使用对象来调用。
$host 数据库地址
$port  数据库端口
$name 数据库名
$user 数据库账号
$pass 数据库密码
$prefix 数据库前缀
$charset 数据库编码
$timeout 数据库超时,如果设置超时时间 则链接数据库会使用持久链接,并在120秒后如果没有任何操作将会释放持久链接,如果设置为0 则不使用持久链接,每次链接都是重新创建链接。

例如:

 $db = new Mysql('127.0.0.1', 3306, 'beacon', 'roow', '123456', 'sl_', 'utf8', 120);
 $list=$db->getList('select * from @pf_news');
 $db->insert('@pf_news',['title'=>'这是一个标题','type'=>1,'pid'=>3,'addTime'=>date('Y-m-d H:i:s')]);

 

 

上一篇:Controller 类
下一篇:DBSelector 类
Copyright © 2021 海南的叶子 All Rights Reserved 琼ICP备2021000725号

琼公网安备 46900702000037号