【问题标题】:Query builder - codeigniter查询生成器 - codeigniter
【发布时间】:2018-02-15 09:48:02
【问题描述】:

我在构建使用三个表的查询时遇到问题。

如果我将查询写成:

$query = "select domains.ID, domains.Name, domains.IP, 
database_info.DB_Name, database_info.DB_User, database_info.DB_Pass, 
ftp.FTP_User, ftp.FTP_Pass from domains
left join database_info on domains.ID = database_info.Domain_ID
left join ftp on domains.ID = ftp.Domain_ID
where domains.ID = $ID";

                $query = $this->db->get();
                if($query->num_rows()>0){
                    return $query->result();
                }

我收到错误号 1096 未使用表 SELECT * 但是,我是否使用查询生成器编写查询:

       $this->db->select('domains.ID','domains.Name','domains.IP',
       'database_info.DB_Name','database_info.DB_User',
       'database_info.DB_Pass','ftp.FTP_User','ftp.FTP_Pass');
        $this->db->from('domains');
        $this->db->join('database_info','domains.ID =
        database_info.Domain_ID', 'left');
        $this->db->join('ftp','domains.ID = ftp.Domain_ID','left');
        $this->db->where('domains.ID',$ID);
        $query = $this->db->get();
        if($query->num_rows()>0){
            return $query->result();
        }

查询运行但仅返回 domain.ID 对想法和建议持开放态度

【问题讨论】:

  • 我会再次阅读用户指南。了解如何在您的第一个示例中执行查询,您基本上是在定义一个字符串,然后尝试将某些内容返回到同一个变量中。提示 - 查看 $this->db->query($query),在您的第二个实例中,查看如何执行 Select :) 您可能会发现 echo $this->db->get_compiled_select();对于快速显示实际生成的 SQL 很有用,它将向您显示您的方式的错误。也请阅读。
  • 非常感谢,首先尝试使用 codeigniter 以便找到我的脚。

标签: mysql codeigniter query-builder


【解决方案1】:

试试这个

$query = $this->db
    ->select('domains.ID,domains.Name,domains.IP, database_info.DB_Name,database_info.DB_User,database_info.DB_Pass,ftp.FTP_User,ftp.FTP_Pass')
    ->from('domains')
    ->join('database_info','domains.ID = database_info.Domain_ID', 'left')
    ->join('ftp','domains.ID = ftp.Domain_ID','left')
    ->where('domains.ID',$ID)
    ->get();
if($query->num_rows()>0)
{
    return $query->result();
}

关键在于您的 select 语句 - 查询生成器只接受一个参数用于整个 select 语句,而不是您所做的那么多

为了安全起见,请不要尝试执行 sql 语句而不转义它们 - CI 的查询构建器将执行此操作 默认 - 但您的第一个示例非常危险且广泛开放 到 sql 注入

【讨论】:

    【解决方案2】:

    使用db->query

    $sql = "select domains.ID, domains.Name, domains.IP, 
    database_info.DB_Name, database_info.DB_User, database_info.DB_Pass, 
    ftp.FTP_User, ftp.FTP_Pass from domains
    left join database_info on domains.ID = database_info.Domain_ID
    left join ftp on domains.ID = ftp.Domain_ID
    where domains.ID = $ID";
    
    $query = $this->db->query($sql);
    $result = $query->result_array();
    

    关注CodeIgniter User Guide

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2018-05-04
      相关资源
      最近更新 更多