数据库的查询
在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');