Git --NB Framework 中文教程
目录 ▾ 数据库操作

最后更新于:2018-10-30 17:42
47次阅读0条评论

数据库

NB Framework内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Dao类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Dao类会自动调用相应的数据库驱动来处理。数据库抽象访问层基于PDO方式,目前内置包含了Mysql、SqlServer、Sqlite等数据库的支持。

连接数据库

如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。

配置文件

在框架配置目录或者业务配置目录中(后面统称为数据库配置文件)配置下面的数据库参数,以MySql为列:

class Configure extends nb\Config {

    public $dao = [
        // 数据库类型
        'driver'        => 'mysql',
        // 服务器地址
        'host'    => '127.0.0.1',
        // 数据库名
        'dbname'    => 'nb',
        // 数据库用户名
        'user'    => 'root',
        // 数据库密码
        'pass'    => '',
        // 数据库连接端口
        'port'    => '',
        // 数据库编码默认采用utf8
        'charset'     => 'UTF8',
        // 数据库表前缀
        'prefix'      => 'nb_',
        //是否开启长链接
        'connect'   => 'false'
    ]; 
}

系统默认支持的数据库driver包括:

driver数据库
mysqlMySQL
sqliteSqLite
sqlsrvSqlServer

driver参数支持命名空间完整定义,不带命名空间定义的话,默认采用nbDao作为命名空间,如果使用应用自己扩展的数据库驱动,可以配置为:

// 数据库类型
'driver'        => '\org\Mysql',

使用

建立好配置以后,我们可以通过以下几种方法使用:

1.实例化nb\Dao

$dao = new Dao('test t','id','dao');

@param 'test t' 数据库表名以及表别名,表别名可省略
@param 'id' 数据表主键名,可省略,默认为id
@param 'dao' 数据库链接配置字段,可省略,默认为dao

2.通过继承nb\Dao

namespace dao;
use nb\Dao;
class Test extends Dao {
    
}
//此时,我们可以省略实例化的所有参数
//框架会自动读取`Test`的类名作为表名
$dao = new Test();

//如果表名不适合做类名
class Test extends Dao {
    
    //重写构建函数即可
    public function __construct() {
        parent::__construct('test t','id','dao');
    }
}

3.静态调用

$dao = Dao::table('test t','id','dao')

//直接给一个链接参数数组
$dao = Dao::table('test t','id',[
    'driver'        => 'mysql',
    'host'    => '127.0.0.1',
    'dbname'    => 'nb',
    'user'    => 'root',
    ...
])

查询数据

我们以下面的数据表(test)结构,来演示相关的数据库操作:

类型注释
idint主键,自增
namevarchar名字
ageint年龄

测试数据:

idnameage
1张三19
2李四18
3王五21

查询单个数据

1.通过主键获取单条数据

//获取主键为1的数据
$dao = new Test();
$test = $dao->findId(1);

//也可以这样
$test = $dao->find('id=1');

//获取主键为2,且只获取name字段和age字段
$test = $dao->findId(1,'name,age');

//函数原型
/**
 * 根据主键查找数据
 * 
 * @param $id 
 * @param string $fields 要获取的字段,默认为所有字段
 * @param int $fetchMode 返回的数据格式
 * @return bool|array
 */
public function findId($id, $fields = '', $fetchMode=PDO::FETCH_ASSOC)

2.通过复杂条件获取单条数据:

$dao = new Test();
//获取name值为张三的数据
$test = $dao->find('name=?','张三');

//获取name值为张三且age值大于17的数据
//注意:即使此条件有多条数据,也只会返回第一条数据
//注意:当有多个绑定参数,第二个参数需为数组形式
$test = $dao->find('name=? and age>?',['张三',17]);

//函数原型
/**
 * 获取一条结果
 * @param $condition
 * @param null $params
 * @param null $fields
 * @param int $fetchMode
 * @return bool|array
 */
public function find($condition, $params = NULL, $fields=null, $fetchMode=PDO::FETCH_ASSOC)

3.从结果集中的下一行返回单独的一列,如果没有了,则返回 FALSE

/**
 * 从结果集中的下一行返回单独的一列,如果没有了,则返回 FALSE
 * @param string&int $id
 * @param string $column 列值
 */
public function findIdColumn($id, $column) {

4.从结果集中的下一行返回单独的一列

/**
 * 获取结果数量
 * @param string $condition
 * @param string&array $params
 * @param string $fields
 */
public function findColumn($condition, $params, $fields)

5.获取唯一结果

/**
 * 获取唯一结果
 * @param string&array $condition
 * @param string $fields
 * @param number $rows
 * @param number $start
 * @param string $order
 */
public function findsUnique($condition = '', $fields = '', $rows = 0, $start = 0, $order='')

修改数据

添加数据

删除数据

链式操作

数据库驱动类nb\dao\Driver

上一篇:响应输出
下一篇:重定向

相关评论

您需要登录后才可以发表评论