数据库的查询

在CodeIgnite中查询数据库,有多种方式,支持常见的SQL拼接方式。

多结果标准查询

下面是一个多行标准查询的例子:

$query = $this->db->query('SELECT name, title, email FROM my_table');

foreach ($query->result_array() as $row)
{
    echo $row['title'];
    echo $row['name'];
    echo $row['email'];
}

上面的 result_array() 函数将查询结果以关联数组的形式返回。例如:$row['title']

标准插入

下面是一个使用SQL拼接方式实现的标准插入数据操作:

$sql = "INSERT INTO mytable (title, name) VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";
$this->db->query($sql);
echo $this->db->affected_rows();

有些时候,如果需要构造复杂的查询语句,使用SQL语句拼接,是一个不错的选择。

使用查询构造器

查询构造器允许你使用较少的代码来在数据库中获取、新增或更新数据。系统会自动对数据 进行转义,所以它还能提供更安全的查询。

get查询

$query = $this->db->get('mytable');
// 相当于 SELECT * FROM mytable
$query = $this->db->get('mytable', 10, 20);
// 相当于 SELECT * FROM mytable LIMIT 20, 10

SELECT子句

$this->db->select('title, content, date');
$query = $this->db->get('mytable');
//相当于 SELECT title, content, date FROM mytable

WHERE子句

建议采用关联数组的形式,将查询条件写入数组:

$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->where($array);
// 相当于 WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

可以在这个方法里包含比较运算符:

$array = array('name !=' => $name, 'id <' => $id, 'date >' => $date);
$this->db->where($array);
// 相当于 WHERE name != 'Joe' AND id < $id, date > $date

GROUP BY子句

$this->db->group_by("title");
// 相当于 GROUP BY title

还可以通过一个数组传入多个值:

$this->db->group_by(array("title", "date"));
// 相当于 GROUP BY title, date

ORDER BY子句

order_by()该方法用于生成 ORDER BY 子句。

第一个参数为你想要排序的字段名,第二个参数用于设置排序的方向, 可选项有: ASC(升序),DESC(降序)和 RANDOM (随机)。

$this->db->order_by('title DESC, name ASC');
// 相当于 ORDER BY `title` DESC, `name` ASC

INSERT语句

可以将数据放到数组中,然后将数组作为参数,传入到insert方法中:

$data = array(
    'title' => 'My title',
    'name' => 'My Name',
    'date' => 'My date'
);

$this->db->insert('mytable', $data);

// 相当于 INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')

还可以使用insert_batch()实现批量插入:

$data = array(
    array(
        'title' => 'My title',
        'name' => 'My Name',
        'date' => 'My date'
    ),
    array(
        'title' => 'Another title',
        'name' => 'Another Name',
        'date' => 'Another date'
    )
);

$this->db->insert_batch('mytable', $data);
// 相当于 INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'),  ('Another title', 'Another name', 'Another date')

UPDATE语句

$data = array(
    'title' => $title,
    'name' => $name,
    'date' => $date
);

$this->db->where('id', $id);
$this->db->update('mytable', $data);
// 相当于
//
//  UPDATE mytable
//  SET title = '{$title}', name = '{$name}', date = '{$date}'
//  WHERE id = $id

DELETE语句

$this->db->where('id', $id);
$this->db->delete('mytable');

// 相当于
// DELETE FROM mytable
// WHERE id = $id

链式方法

通过将多个方法连接在一起,链式方法可以简化你的语法:

$query = $this->db->select('title')
        ->where('id', $id)
        ->limit(10, 20)
        ->get('mytable');

results matching ""

    No results matching ""