CodeIgniter学习笔记(七)——CI中的数据库操作
CI数据库配置文件是/application/config/database.php
// 可以创建多个数据库连接配置,通过$active_group选择使用哪个数据库连接 $active_group = 'default'; // 配置是否加载查询构建类,默认为TRUE,通常保持默认值 $query_builder = TRUE; // 数据库连接配置,可以有多个连接配置,索引需要区分开 $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', // ip 'username' => 'root', // 用户名 'password' => '123456', // 密码 'database' => 'workplatform', // 数据库名称 'dbdriver' => 'mysqli', // 使用什么库访问数据库 // 目前可以支持cubrid,ibase,mssql,mysql,mysqli,oci8 // odbc, pdo, postgre, sqlite, sqlite3, sqlsrv 'dbprefix' => '', // 表前缀 'pconnect' => FALSE, 'db_debug' => TRUE, 'cache_on' => FALSE, // 是否启用查询缓存 'cachedir' => '', // 查询缓存目录 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', // 交换表前缀,表前缀的替换写法 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
在使用数据库前,需要使用装载器来加载数据库对象
$this->load->database();
装载完成后,$this->db就是这个数据库对象,以后的数据操作都是调用这个对象的方法进行
首先定义SQL语句:
$sql = 'SELECT * FROM user';
再调用db对象的query方法进行查询
$result = $this->db->query($sql);
返回值$result是一个对象,通过调用它的方法可以返回不同形式的结果,例如:调用它的result()方法获取查询结果
$users = $result->result();
此时,$users是一个对象数组,或者调用它的result_array()方法获取关联数组查询结果
$users = $result->result_array();
调用row()方法以对象形式返回第一条记录或第几条记录
$users = $result->row();
但是,如果SQL是增、删、修改语句,query()方法将返回TRUE或FALSE,此时通过db的方法可以获取执行的结果,比如:
$this->db->affected_rows(); // 获取影响的行数 $this->db->insert_id(); // 获取插入数据的id
在执行数据库操作前,由于不知道在查询前$this->db是否已经生成,因此都需要调用$this->load->database()方法,通过修改/application/config/autoload.php文件,可以让CI自动加载数据库
$autoload['libraries'] = array('database');
如果SQL语句中的变量过多,会影响语句的编写,这时可以采用占位符来解决
$data[0] = 'dj'; $data[1] = '123456'; $sql = "INSERT INTO user (account, password, usertype, username) VALUES ('1231', ?, '1', ?)"; $result = $this->db->query($sql, $data);
传入的数组中的元素会依次取代SQL中的?,生成实际的SQL语句
备注:在测试这段代码时,由于错误的在字段名两侧加上了’,造成一直报错,引以为戒