#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 случай имеет значение, и подобное смешивание может привести к ошибкам. Это хорошая идея, чтобы выбрать один и придерживаться его.