首页 > 代码库 > Kohana 数据库使用

Kohana 数据库使用

不过官网没有使用教程,自己摸索出来的,有错误的时候大家指出来哦,共同进步嘛~

首先是配置:modules\database\config\database.php

<?php
‘default‘ => array(
		‘type‘       => ‘pdo‘,
		‘connection‘ => array(
			/**
			 * The following options are available for PDO:
			 *
			 * string   dsn         Data Source Name
			 * string   username    database username
			 * string   password    database password
			 * boolean  persistent  use persistent connections?
			 */
			‘dsn‘        => ‘mysql:host=localhost;dbname=kohana‘,
			‘username‘   => ‘******‘,//
			‘password‘   => ‘******‘,//
			‘persistent‘ => FALSE,
		),
		/**
		 * The following extra options are available for PDO:
		 *
		 * string   identifier  set the escaping identifier
		 */
		‘table_prefix‘ => ‘ko_‘,
		‘charset‘      => ‘utf8‘,
		‘caching‘      => FALSE,
		‘profiling‘    => TRUE,
),


可以配置多个数据库配置哦~

配置好了之后就可以使用咯

配置完了就可以使用咯

在你的控制器中就可以这样

数据库实例

有两种数据库实例

1.DB数据库实例

2. database数据库实例

其中DB是对database的再次封装

下面描述两个数据库实例的使用

Database

取得方法:

<?php
$database=Database::instance();//可以取得database实例
#例外在模型中,dababase做为模型构造函数的唯一一个传递参数,并在模型中有$this->_db属性
$database=$this->_db;
 
 
使用方法:(假设在模型中)
插入数据:
<?php
$sql="INSERT INTO `kohana`.`user` (`name` ,`age` )VALUES ( ‘test‘, ‘1‘), ( ‘test2‘, ‘2‘)";
$dat=$this->_db->query(Database::INSERT,$sql,false);
# return 返回的两个值中,第一个是自动增长的ID,如果有的话,第二是影响的行数 
 
更新数据:
<?php
$sql="UPDATE `ko_users` SET `user_name` = ‘test111q1‘  ";
$dat=$this->_db->query(Database::UPDATE,$sql,false);
#return 返回影响行数

 
删除数据:
<?php
$sql="DELETE FROM `kohana`.`user` WHERE `user`.`id` = 1";
$dat=$this->_db->query(Database::DELETE,$sql,false);
#return 返回影响行数
 
 
查询数据:
<?php
$sql="select * from ko_com_var";
$res=$this->_db->query(Database::SELECT,$sql,false);
#得到所有查询数据
$res->as_array();
#得到一条查询结果
$res->offsetGet(0);
#取得特定记录的指定字段值
$res->get("name");
#移动指针并取得指定字段
$res->next()->get("name");
$res->prev()->get("name");
#计算取得结果总数
$res->count();
#还有其他方法不在一一罗列,请查看手册

其他常用帮助函数:
<?php
#过滤字符串用,不知道为什么放到这个单例中,该是公用才对~,或许是每中数据库的过滤的东西有差别吧
$str=$this->_db->escape("ddddd  ddd");
#表前缀,这个常用~
$str=$this->_db->table_prefix();
#还有其他查看帮助,不介绍咯

DB实例使用(以下演示在Kohana环境即可)
有两种方式:
第一种:
以下的execute(); 有一个数据库适配器参数,当有多个数据连接的时候指定操作那个数据库,就是配置文件的那个KEY值
插入数据:
<?php
$sql="INSERT INTO `kohana`.`user` (`name` ,`age` )VALUES ( ‘test‘, ‘1‘), ( ‘test2‘, ‘2‘)";
#其实也可以用Database::UPDATE,结果只返回影响行数,不过还是按规范好.呵呵~,上述Database也可以
$dat=DB::query(Database::INSERT,$sql);
$row=$dat->execute();
#返回的两个值中,第一个是自动增长的ID,如果有的话,第二是影响的行数
Kohana::debug($row);

数据更新:
<?php
$sql="UPDATE `user` SET `name` = ‘test2‘ WHERE `user`.`id` =1 ";
$dat=DB::query(Database::UPDATE,$sql);
$row=$dat->execute();
#返回影响行数
echo Kohana::debug($row);
 
数据删除:
<?php
$sql="DELETE FROM `kohana`.`user` WHERE `user`.`id` = 1";
$dat=DB::query(Database::DELETE,$sql);
$row=$dat->execute();
#返回影响行数
echo Kohana::debug($row);

数据查询:
<?php
$sql="select * from user";
$dat=DB::query(Database::SELECT,$sql);
#指定数据库取数据
$row=$dat->execute($database)->offsetGet(0);
#默认数据库取数据,和上面的Database一样,都是返回Database_Result_Cached对象,实现了迭代器模式
$rus=$dat->execute();
#取得部分结果
$row=$rus->offsetGet(0);
#取得所有结果
$allrow=$rus->as_array();
#取得特定记录的指定字段值
$no1name=$rus->get("name");
#移动数组指针,并取指定字段值
$no2name=$rus->next()->get("name");
#当前指针
echo $rus->key();
#移动数组指针,并取指定字段值
echo $no1name=$rus->prev()->get(‘name‘);
#取行数
echo $rus->count();

第二种:(官网文档称之为查询器模式,不好用,呵呵,简单的可以用下)
插入数据:
<?php
$query = DB::insert(‘user‘, array(‘user‘, ‘age‘))
		->values(array(‘test1‘, ‘11‘));
$query->execute();
#返回和上面一样

更新数据:
<?php
$query = DB::update(‘user‘)
		->set(array(‘age‘ => ‘100‘))
		->where(‘user‘, ‘=‘, ‘test1‘);
$query->execute();
#返回和上面一样


删除数据:

<?php
$query = DB::delete(‘user‘)
		->where(‘age‘, ‘IN‘, array(‘100‘, ‘11‘));
$query->execute();
#返回和上面一样


查询数据:

<?php
$query = DB::select()->from(‘user‘)->where("id","=","1");
$res=$query->execute();
#和上面一样,$res是Database_Result_Cached对象
$res->as_array();
#其他方法不演示了~


附注:
数据绑定,抄官方实例一个,该很简单,比较容易看懂
<?php
$query = DB::query(Database::INSERT, ‘INSERT INTO users (username, password) VALUES (:user, :pass)‘)      
->bind(‘:user‘, $username)    
->bind(‘:pass‘, $password);  
foreach ($new_users as $username => $password){    
	$query->execute();
}

基本上都有啦,还有我不常用的,不介绍啦,不过基本上都介绍完毕,