数据库引擎
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注入特别说明)
插入数据使用方法:$this->db->table('表名')->insert($data);特别说明: ->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('表名')->where($condition)->update($data);$data为数据数组 如 $data['name']='admin'; $data['email']='352772@q.com'; 数组里的键名对应数据库的字段名 插入成功返回插入数据的id,否则返回false
删除数据使用方法:$this->db->table('表名')->where($condition)->delete();$data为数据数组 如 $data['name']='admin'; $data['email']='352772@q.com'; $condition为查询条件,比如:$condition = "id=1 and type=2"; 注意:等条件语句$condition为空的时候,不会更新数据返回false 更新成功返回影响的数据行数,否则返回false
查询数据条数使用方法:$this->db->table('表名')->where($condition)->count();成功返回一个整数,否则返回false另种写法$this->db->table('表名')->field('count(*) as 别名')->where($condition)->get();$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)->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 ;
其他连贯操作方法
执行原生sql代码$this->db->query($sql); $this->db->query($sql,$bind); //$bind 占位符绑定数据$this->db->cache(缓存时间)->query($sql);$this->db->debug()->query($sql); //调试模式一样有效如果sql不是查询条件语句,缓存设置无效正常情况下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(); 作用:输出数据库信息
添加表前缀$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,则回滚事务。
以上内容是否对您有帮助:
← 模板引擎
更多建议: