一 数据库配置文件的配置和自动加载
1 直接修改config文件夹下面的database.php,把数据库相关信息填上去即可
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '123456',
'database' => 'tpstudy',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
如果有多个数据库或数据源也可以配置多个,然后在load的时候配置参数就能访问到数据库了
2 自动加载database(可选)
找到config下面的autoload.php,在 $autoload['libraries'] = array(); 这个数组里写上'database',配置方面文件里也给出了一些例子,照着弄就OK了
二 原生SQL操作数据库
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class User extends CI_Controller {
public function showList(){
$this->load->database();
$query=$this->db->query("select * from tp_user order by id desc");
$res=$query->result_array();
$data["userList"]=$res;
$this->load->view("user/list",$data);
}
public function mergeUser(){
$this->load->database();
$param=$this->input->get();
$data[0]=$param['userName'];
$data[1]=$param['id'];
$sql="update tp_user set userName=? where id=?";
$result=$this->db->query($sql,$data);
if($result===False){
echo "修改失败";
}else{
echo "受影响的行数".$this->db->affected_rows();
}
}
}
?>
这种方式比较万能,复杂的查询或数据库操作可以选择这种方式,使用数据库或者返回视图都需要通过load方法,其中load数据库操作的时候可以使用自动加载,这样就不需要写很多次 $this->load->database();了
三 ORM模式操作数据库
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dept extends CI_Controller {
/**
*新增
*/
public function saveDept(){
$data=array(
"name"=>"后勤部",
"orderByValue"=>0,
"description"=>"暂无",
"pid"=>0
);
$this->load->database();
$res=$this->db->insert("tp_dept",$data);
if($res===False){
echo "保存失败";
}else{
echo "保存成功";
}
}
/**
* 修改操作
*/
public function updateDept(){
$data=array(
"name"=>"卫生部",
"orderByValue"=>0
);
$this->load->database();
$res=$this->db->update("tp_dept",$data,array("id"=>9));
if($res===False){
echo "修改失败";
}else{
echo "修改成功";
}
}
/**
* 删除操作
*/
public function removeDept(){
$this->load->database();
$res=$this->db->delete("tp_dept",array("id"=>9));
if($res===False){
echo "删除失败";
}else{
echo "删除成功";
}
}
/**
* 查询操作
*/
public function queryDept(){
$this->load->database();
$res=$this->db->get("tp_dept")->result_array();
echo "<pre>";
var_dump($res);
}
public function otherQuery(){
$this->load->database();
$res=$this->db->select("id,name,pid")
->from("tp_dept")
->where(array("id >"=>5))
//->where("id in",array(5,6,8,10))
->order_by("id asc")
->get()
->result_array();
echo "<pre>";
var_dump($res);
}
}
?>
result_array()用于把数据转成数组的形式方便后期页面的遍历读取
四 页面展示
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户列表</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<table class="table table-condensed">
<caption>用户信息</caption>
<thead>
<tr>
<th>id</th>
<th>用户名</th>
<th>昵称</th>
<th>生日</th>
</tr>
</thead>
<tbody>
<?php foreach($userList as $u): ?>
<tr>
<td><?php echo $u['id'] ?></td>
<td><?php echo $u['userName'] ?></td>
<td><?php echo $u['nickName'] ?></td>
<td><?php echo $u['birthday'] ?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
</body>
</html>
和其他框架不同的是CI框架的页面展示默认不加载任何的模板引擎,还是最初的使用php代码直接在页面遍历或读取数据