Конструктор запросов - codeigniter

У меня проблемы с построением запроса, который использует три таблицы.

Если я напишу запрос как:

$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();
        }

Запрос выполняется, но возвращает только домены. Идентифицирован и открыт

2 ответа

Решение

Попробуй это

$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();
}

Суть в вашем утверждении выбора - построитель запросов принимает только один аргумент для всего вашего оператора выбора не так много, как вы

и, пожалуйста, в целях безопасности - никогда не пытайтесь выполнять SQL-операторы без их экранирования - CI построитель запросов будет делать это по умолчанию - но ваш первый пример довольно опасен и широко открыт для SQL-инъекций

Использование 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

Другие вопросы по тегам