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语句

备注:在测试这段代码时,由于错误的在字段名两侧加上了’,造成一直报错,引以为戒

原文地址:https://www.cnblogs.com/iamsupercola/p/4631768.html