Привязка Codeigniter sql

#mysql #codeigniter

#mysql #codeigniter

Вопрос:

Как мне использовать привязку Codeigniter SQL, если есть две целевые даты? Правильно ли я сделал это ниже?

 public function getInvestmentForBorrowing($id, $Interest, $Currency, $Loantime, $target_date, $Risk_category)
    {          
        $query = '
            select  CASE WHEN (a.amount_financed - a.amount_invested - a.amount_withdrawn) < a.amount_per_borrower 
                        THEN round((a.amount_financed - a.amount_invested - a.amount_withdrawn), 2) 
                        ELSE round((a.amount_per_borrower) , 2) 
                    END AS investable_amount, a.*,
                    c.IBAN as Return_IBAN, c.BIC as Return_BIC,
                    i.average_rate
            from    investment a 
            inner   join userinfo c 
                on  a.Owner = c.Owner and
                    c.UPDATE_DT is null                                
            inner   join exchange_rates i 
                on  a.Currency = i.currency_id and
                    ? between i.effective_dt and i.expiration_dt
            where   a.ORIG_ID =  ? and 
                    a.Interest <= ? and 
                    a.Currency =  ? and
                    a.status = 2 and 
                    a.Loantime >= ? and
                    a.Available >= ? and
                    a.Risk <= ? and
                    a.UPDATE_DT is null
            having  investable_amount > 0';

        $query = $this->db->query($query, array($target_date, $id ,$Interest, $Currency, $Loantime ,$target_date ,$Risk_category));
        $result = $query->result();
        return $result;
}
  

Напишите теперь вопросительные знаки просто представляют массив, поэтому я добавил два $ target_date в массив, но не уверен, что это правильный способ сделать это.

Ответ №1:

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

Просто убедитесь, что количество? сопоставьте количество значений, которые вы предоставляете, и они находятся в правильном порядке.

Один из способов проверить его на работоспособность, помимо простого его запуска, — это выполнить следующую команду сразу после выполнения запроса:

 echo $this->db->last_query();
  

И предоставляя ему известные данные, вы можете обмануть и просто жестко запрограммировать некоторые фиктивные значения для тестирования, взять сгенерированный SQL и вставить его во что-то вроде phpmyadmin и запустить сгенерированный SQL в базе данных и посмотреть, работает ли он с ожидаемыми результатами.

Просто примечание относительно вашего стиля именования переменных. Я вижу, что вы смешиваете случаи, т.Е. Такие вещи, как $ target_date (все в нижнем регистре) и $ Risk_category (первая буква в верхнем регистре). Просто имейте в виду, что в системе на базе Linux случай имеет значение, и подобное смешивание может привести к ошибкам. Это хорошая идея, чтобы выбрать один и придерживаться его.