2015-07-06 88 views
0

在我的應用程序控制器中,我有一個方法transaction_reimburse(),它接收到的id爲POST字符串值。該方法的功能是獲取與數據庫中的id匹配的所有事務,並相應地更新它們。在Codeigniter中從數據庫中檢索和更新數據時出錯

控制器方法:

public function transaction_reimburse() { 

    $reimburse = array('reimburse' => 1); 
    $transactions = $this->Transaction_model->get_these_ids($this->input->post('ids')); 
    $this->Transaction_model->reimburse_these($transactions, $reimburse); 

} 

模型方法:

function get_these_ids($ids) { 

    $this->db->select('tbl_user.name as uname, tbl_transactions.participant_id as pid, tbl_transactions.card_number as card_no, tbl_transactions.group as ugroup, tbl_toilet.name as utoilet, tbl_transactions.amount_paid as u_amount, tbl_transactions.toilet_price as t_price, tbl_transactions.reimburse_amount as r_amount, tbl_transactions.details as u_details'); 
    $this->db->from('tbl_transactions'); 
    $this->db->join('tbl_user', 'tbl_user.participant_id = tbl_transactions.participant_id', 'left'); 
    $this->db->join('tbl_toilet', 'tbl_toilet.toilet_code = tbl_transactions.toilet_code', 'left'); 
    $this->db->where("tbl_transactions.id IN (". $ids .")"); 
    return $this->db->get(); 

} 

模型方法:

​​

不過,我收到以下錯誤:

A PHP Error was encountered  
Severity: 4096 
Message: Object of class CI_DB_mysql_result could not be converted to string 
Filename: models/transaction_model.php 
Line Number: 450 

A Database Error Occurred 
Error Number: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 
UPDATE `tbl_transactions` SET `reimburse` = 1 WHERE `tbl_transactions`.`id` IN() 
Filename: C:\xampp\htdocs\ipa\system\database\DB_driver.php 
Line Number: 330 

我需要知道的是爲什麼會出現這些錯誤是什麼?

+1

所以問題是?? –

+0

POST ID的格式是什麼? – Shomz

+0

您能否詳細說明$ ids forrmat?數組或可能是其他可能性 –

回答

0

錯誤表示您的$ids變量不是字符串格式(意思是:1,2,3,4,它可能是一個數組)。要修復它,首先使用print_r($ids)var_dump($ids)找出它的格式。一旦知道了格式,使用PHP函數(如implode())將其轉換爲字符串。

0

IN正在尋找一組例如(1,2,3,4)

要麼讓你的崗位值採用的格式1,2,3,4這樣,當值包含到查詢它是有效的,或者如果你發送一個陣列使用的方法在PHP如implode(',',$array)以創建所需的格式結合到查詢..

0

我已經審查了你的兩個函數,發現在這兩個函數中,你把tbl_transactions.id放在where子句中,並且id是從post中傳遞的,因此不需要調用get_these_ids來獲得id,你已經有了id在post數組中,因此而不是事務變量,只需使用$ this-> input-> post('ids')來進行reimburse_these函數。

如果您確實想從get_these_ids函數獲取tbl_transactions,那麼您需要使用group_concat和group by來查詢get_these_ids函數,並且只需在get_these_ids函數中返回該編譯後的標識符就可以了。