2016-10-13 10 views
0

対象日が2つある場合、Codeigniter SQLバインディングはどのように使用しますか? 私はそれを以下のように修正しましたか?私は、配列に2 $のtarget_dateを追加しましたが、それを行うための正しい方法thatsの場合はわからないので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; 
} 

書き込み今疑問符はちょうど配列を表します。

答えて

0

codeigniterのドキュメントによれば、私は正しいと思われますが、元のSQLが正しいかどうかにかかわらず、正しいと思われます。

あなたが提供している値の数と一致し、それらは正しい順序であります。

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

そして、それはデータを知ら提供する、あなたがカンニングすることができますし、単にハードコード:正気に

一つの方法はそれを実行しているから離れて、それをチェックし、クエリを実行した直後に、次のコマンドを配置することですいくつかのテスト用のダミー値を生成し、生成したSQLをphpmyadminのようなものに投げ込み、生成されたSQLをデータベースに対して実行し、期待される結果が得られるかどうかを確認します。

変数の命名スタイルに関するちょっとしたメモです。 $ target_date(すべて小文字)や$ Risk_category(大文字の大文字)のようなものを混在させています。 Linuxベースのシステムでは、問題が発生し、そのようなミキシングがエラーを引き起こす可能性があることに注意してください。 1つを決めてそれに固執するのは良い考えです。

関連する問題