viqecel 发表于 2013-7-10 08:44:37

$this->db->select('1', FALSE)是什么用法,为了安全?

function is_email_available($email)        {
                $this->db->select('1', FALSE);
                $this->db->where('LOWER(email)=', strtolower($email));
                $this->db->or_where('LOWER(new_email)=', strtolower($email));

                $query = $this->db->get($this->table_name);
                return $query->num_rows() == 0;
        }

qi_ruo 发表于 2013-7-10 08:52:50

为了提高效率吧,因为如果没有select子句,CI会为你加载所有字段,但这里的情况是只需要获取行数就可以了,不需要选择任何字段,所以加了个select 1,当然也可以使用 $this->db->count_all_results() 直接获取行数。

viqecel 发表于 2013-7-10 09:29:08

本帖最后由 viqecel 于 2013-7-10 09:32 编辑

SELECT COUNT(*) FROM `table` WHERE `column` = "value"
也可以这样对吧.
那select 1 这种写法,依据是什么?聚集函数吗.1表示重命名的一个字段吗.他的作用我理解了,不是返回什么记录,只是返回记录数.

┌._|.泉 发表于 2013-7-10 10:31:51

减少字段

gogogo1027 发表于 2013-7-10 16:40:29

本帖最后由 gogogo1027 于 2013-7-10 16:44 编辑

这个语法可接受一个可选的第二个参数。如果你把它设为FALSE, CodeIgniter 将不会使用反引号保护你的字段或者表名。这在进行复合查询时很有用。
正常情况下

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



假如你使用复合查询,则将它第二个参数设置为FALSE,避免它把你的select()包含的SQL当成是一个字段来格式化。


$this->db->select("('SELECT SUM(payments.amount) FROM payments WHERE payments.invoice_id=4') AS amount_paid", FALSE);
$query = $this->db->get('mytable');


符合查询的时候才用到,默认则不需要。
页: [1]
查看完整版本: $this->db->select('1', FALSE)是什么用法,为了安全?