2015-11-18 171 views
2
public function get_modno_sno($id) 
{ 
    $query = 'select a.model_no,a.serial_no,a.stock_id from tra_item_stock a where a.trans_id is NULL and a.model_no = '.$id.' 
    union 
    select a.model_no,a.serial_no,a.stock_id from tra_indent_issue_details_2 a where a.flag = 3 and a.model_no ='.$id; 
    $result = $this->db->query($query); 
    return $result->result(); 
} 

當我運行此查詢顯示爲錯誤:這個查詢出了什麼問題?

列 「kb234」 不存在

kb234的字符改變值傳遞給$id

+0

'model_no'的數據類型是什麼? –

+0

哎你錯過了''''這裏'a.model_no ='。$ id;'(在第二個選擇) –

+0

@vivek它是字符變化的 –

回答

3

您不用引號括住kb234,因此數據庫將其標識爲列名稱。

你可以修改你的代碼包括引號:

public function get_modno_sno($id) 
    { 
     $query = "select a.model_no,a.serial_no,a.stock_id from tra_item_stock a where a.trans_id is NULL and a.model_no = '$id' 
     union 
     select a.model_no,a.serial_no,a.stock_id from tra_indent_issue_details_2 a where a.flag = 3 and a.model_no = '$id'"; 
     $result = $this->db->query($query); 
     return $result->result(); 
    } 

但是請注意,通過使用字符串操作創建SQL查詢是一個狡猾的做法,可以讓您的代碼容易受到SQL注入式攻擊。您應該考慮使用prepared statement

2
.model_no ='.$id; 

缺失一個'最後爲聯盟查詢