【问题标题】:What does this active record query do?这个活动记录查询有什么作用?
【发布时间】:2013-12-30 16:45:22
【问题描述】:

我正在处理一个现有项目,其代码由早期的开发人员编写。当我读取模型中的一个函数时,它是这样写的:

        $this->db->select('1', FALSE);
    $this->db->where('product_id', $product_id);
    $query = $this->db->get('product');     
    if ($query->num_rows() == 1) {
        return false;
    }
        return true;

我想知道第一个语句的作用是什么?即 $this->db->select('1', FALSE);因为产品表中没有名为 1 的列。我在网上搜索但没有任何帮助。 有没有人解释一下?

【问题讨论】:

  • db 对象有什么作用?特别是db对象的select()?
  • 我知道它正在选择列,但名为 1 的列在产品表中不存在并且代码运行良好,即产品表中没有“未知列 1” ' 错误。
  • 您的代码中必须有一个对象定义。它不是任何标准的 php 函数。请检查 $this->db 中的对象并复制我们这个对象类的 select() 函数。
  • 它看起来像一个小型检查查询,并非旨在使用 $query->result_array(); 传回信息, SELECT 中的 1 仅用于获取表中的所有字段(节省带宽/资源)。

标签: php sql codeigniter activerecord


【解决方案1】:
SELECT 1;

=> 1

SELECT 1 + 1;

=> 2

Codeigniter 你可以在什么时候使用这个查询

$this->db->select('1', FALSE);

如果不转为FALSE,则只能选择列

$this->db->select('column', TRUE);

【讨论】:

    【解决方案2】:
    SELECT 1 FROM
    

    用于判断结果是否存在。它将为结果中的每一行返回一列 1。

    【讨论】:

    • 不是由 num_rows()==1 确定的吗?
    • 否,因为它可以返回多于 1 行,具体取决于完整查询和数据库中的内容。但是,我猜您至少只有一种产品匹配。 num_rows() 只是检查是否只有一个结果。
    【解决方案3】:

    到目前为止我还没有看到类似的东西,所以我会做一个

     echo $this->db->last_query()
    

    $this->db->get() 之后只是为了查看实际的 sql 查询。

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2015-07-31
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2013-02-01
      相关资源
      最近更新 更多