数据库引擎

2018-02-05 10:54 更新

PHP 数据对象(PDO)扩展是PHP统一访问数据库的轻量级接口,本数据库引擎就是采用PDO拓展,因此支持各种数据库如MySQL, MSSQL, SQLite, MariaDB, Oracle, Sybase, PostgreSQL等等,同时支持数据库多联。

数据库配置
说明:跟模板配置一样,可以在根目录里config.php文件中可配置,也可以在对应应用根目录里新建个config.php文件配置。

/单个数据库配置代码如下: 
<?php                   
$config['DB']['DB_TYPE']='mysql';//数据库类型  mysql  mssql  sqlite  mariadb  oracle sybase  postgresql
$config['DB']['DB_HOST']='localhost';//数据库主机,一般不需要修改
$config['DB']['DB_USER']='root';//数据库用户名
$config['DB']['DB_PSWD']='123456';//数据库密码
$config['DB']['DB_PORT']=3306;//数据库端口,mysql默认是3306,一般不需要修改
$config['DB']['DB_NAME']='finch';//数据库名
$config['DB']['DB_PREFIX']='finch_';//数据库表前缀
$config['DB']['DB_CHARSET']='utf8';//数据库编码,一般不需要修改
$config['DB']['DB_OPTION']='';//PDO 连接选项
                             //默认这个不是长连接,如果需要数据库长连接,array(PDO::ATTR_PERSISTENT => true)
?>  
//多个数据库配置代码如下: 
<?php   
$config['DB'][0] = array(//0号 为主数据库 既默认连接数据库
    'DB_TYPE'=>'mysql',//数据库类型  mysql  mssql  sqlite  mariadb  oracle sybase  postgresql
    'DB_HOST'=>'localhost',//数据库主机,一般不需要修改
    'DB_USER'=>'root',//数据库用户名
    'DB_PSWD'=>'123456',//数据库密码
    'DB_PORT'=>3306,//数据库端口,mysql默认是3306,一般不需要修改
    'DB_NAME'=>'finch',//数据库名
    'DB_PREFIX'=>'finch_',//数据库表前缀
    'DB_CHARSET'=>'utf8',//数据库编码,一般不需要修改
);             
$config['DB'][1] = array(//1号 为sqlite 数据库
    'DB_TYPE'=>'sqlite',//数据库类型
    'DB_PATH'=>'base', //数据库文件起始路径 空或base=系统根目录,值app=当前应用目录且本数据库只能在本应用下访问。 
    'DB_SPACE' =>'data', //放置数据库文件的文件夹名  如果为空 默认 文件夹名为sqlite
    'DB_FILE' =>'finch.db',//数据库文件名
    'DB_PREFIX'=>'finch_',//数据库表前缀
   );
?>  
启用数据库引擎
跟模板引擎是一样的只要继承controller 类即可,后续会讲到如何在模型model里启用数据库引擎。
//index_controller.php文件 只要修改成
<?php                   
class index_controller extends controller{//只要这里继承下controller 类既可加载模板引擎 数据库引擎
     
    public function index(){
        $data = $this->db->table('表名')->where('条件语句')->get();
        print_r($data);
        echo 'Hello World!';
    }
     
}
?>  
数据库操作
说明:框架默认$this->db为统一数据库操作对象,提供的连贯操作方法(也有些框架称之为链式操作),可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。

表名
统一说明:以下操作中的表名,如果配置文件里有统一前缀设置过,那么这里的表名就不用包含前缀了
如果要忽略前缀 $this->db->table('表名',true)-> 将不添加前缀

条件语句(防SQL注入特别说明)
特别说明: ->where(sql语句(字符串类型),占位符绑定值(数组结构)) ,有三种条件语句写法
$this->db->table('表名')->where('id=1')-> 直接填写条件语句,用于条件语句的值非文本框类输入的值
而采用以下两种占位符传值,可以有效预防SQL注入问题。
$this->db->table('表名')->where('id=?',array(1))-> 使用问号占位符,后面对应占位符值数组 值对应占位符位置 
$this->db->table('表名')->where('id=:id',array(':id'=>1))-> 使用命名占位符一
$this->db->table('表名')->where('id=:id',array('id'=>1))-> 使用命名占位符二
更新数据 update 替换数据 replace 只能使用问号占位符,不能使用命名占位符, 因为提交的数据统一已经用?绑定
而在 SQL 语句中同时包含命名(:name)或问号(?)参数占位符,只能选择其中一种风格
插入数据使用方法:$this->db->table('表名')->insert($data);
$data为数据数组 如 
$data['name']='admin'; 
$data['email']='352772@q.com'; 
数组里的键名对应数据库的字段名
插入成功返回插入数据的id,否则返回false
更新数据使用方法:$this->db->table('表名')->where($condition)->update($data);
$data为数据数组 如 
$data['name']='admin'; 
$data['email']='352772@q.com'; 
$condition为查询条件,比如:$condition = "id=1 and type=2";
注意:等条件语句$condition为空的时候,不会更新数据返回false
更新成功返回影响的数据行数,否则返回false
删除数据使用方法:$this->db->table('表名')->where($condition)->delete();
$condition为查询条件,比如:$condition = "id=1 and type=2";
删除成功返回影响的数据行数,否则返回false ;
注意:当$condition为空时,不会删除数据。防止不小心把整个表的数据给删除了;
查询数据
1、查询一条数据:
    $data=$this->db->table('表名')->where($condition)->get(); 
    成功返回一维数组,否则返回false 
2、查询单个字段单条数据:
    $data=$this->db->table('表名')->where($condition)->getval('字段名'); 
    成功返回字段对应数据 
3、查询多条数据:
    $list=$this->db->table('表名')->where($condition)->getlist(); 
    成功返回二维数组,否则返回false
查询数据条数使用方法:$this->db->table('表名')->where($condition)->count();成功返回一个整数,否则返回false另种写法$this->db->table('表名')->field('count(*) as 别名')->where($condition)->get();判断数据是否存在使用方法:$this->db->table('表名')->where($condition)->has();返回 1 或者 0, 1存在 0不存在数据最大值、最小值、平均值、合计值最大值:$this->db->table('表名')->where($condition)->max('字段名');最小值:$this->db->table('表名')->where($condition)->min('字段名');平均值:$this->db->table('表名')->where($condition)->avg('字段名');合计值:$this->db->table('表名')->where($condition)->sum('字段名');另种写法最大值:$this->db->table('表名')->field('max(字段名) as 别名')->where($condition)->get();最小值:$this->db->table('表名')->field('min(字段名) as 别名')->where($condition)->get();平均值:$this->db->table('表名')->field('avg(字段名) as 别名')->where($condition)->get();合计值:$this->db->table('表名')->field('sum(字段名) as 别名')->where($condition)->get();替换数据使用方法:$this->db->table('表名')->where($condition)->replace($data);$data = array( '字段名'=>array( '查找关键字'=>'替换用字符', ),);替换成功返回影响的数据行数,否则返回false ;其他连贯操作方法
正常情况下limit(),order(),cache(),where() 没有先后顺序之分1、多联数据库选择 os:
    很多项目经常涉及到多个数据库同时访问的情况, 所以我特别设计了这个多联结构。
    比如需要操控配置文件里一号数据库 
    $list=$this->db->os(1)->table('表名')->where($condition)->getlist(); 
    注意:os()方法必须排在第一位,在table前面,否则无效,默认数据库则无需此方法。
2、限制字段 field:
    $data=$this->db->table('表名')->field('id,title')->where($condition)->get(); 
3、排序 order:
    $list=$this->db->table('表名')->where($condition)->order('add_tiem desc,id desc')->getlist(); 
4、限制条数 limit:
    $list=$this->db->table('表名')->where($condition)->order('id desc')->limit(10)->getlist(); 
    $list=$this->db->table('表名')->where($condition)->order('id desc')->limit('1,10')->getlist(); 
5、缓存 cache:
    $list=$this->db->table('表名')->where($condition)->order('id desc')->cache(3600)->getlist(); 
    cache($time) $time>0,数据缓存时间,$time=0,不缓存 缓存单位 秒 
6、聚合函数 group:
    $list=$this->db->table('表名')->where($condition)->group('字段名')->getlist(); 
7、子句 having:
    $list=$this->db->table('表名')->where($condition)->having('子句')->getlist(); 
8、调试模式 debug:
    开启调试 $list=$this->db->table('表名')->where($condition)->debug()->getlist(); 
                   $list=$this->db->table('表名')->where($condition)->debug(1)->getlist(); 
    取消调试 $list=$this->db->table('表名')->where($condition)->debug(0)->getlist(); 
    作用:输出当前SQL 语句,用来查看生成的sql语句 是否正确 
    注意:如果开启调试模式就暂时取消缓存功能,同时debug放在cache后面才生效 
9、日志 log:
    $this->db->log();
    作用:输出当页所有执行过的SQL 语句
10、日志 last_query:
    $this->db->last_query();
    作用:输出当页最后一条SQL 语句
11、数据库信息 info:
    $this->db->info();
    作用:输出数据库信息
执行原生sql代码$this->db->query($sql); $this->db->query($sql,$bind); //$bind 占位符绑定数据$this->db->cache(缓存时间)->query($sql);$this->db->debug()->query($sql); //调试模式一样有效如果sql不是查询条件语句,缓存设置无效添加表前缀$this->db->pre('表名'); 如:$sql = "UPDATE ".$this->db->pre('book')." SET name = 'Zhongshan' WHERE id = 8"; $this->db->debug(0)->query($sql);数据库事务数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。注意:事务操作只对支持事务的数据库,并且设置了数据表为事务类型才有效,在Mysql数据库中请设置表类型为InnoDB。$db = $this->db;$this->db->action(function($db) { $db->调用数据库操控 //数据库操作});不是每个数据库引擎都支持事务。你必须在使用前检查。如果返回false,则回滚事务。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号