2014-03-31 129 views
1

美好的一天! 我有這個疑問:Where子句匹配變量不工作

$name = $this->input->get_post('name'); 
$unit = $this->input->get_post('unit'); 
$user = $this->session->userdata('user'); 
$sql = $this->db->query("select ID from type WHERE code LIKE '%".$unit."%'"); 
     $result = mysql_query($sql); 
$this->db->set('Name', $name); 
$this->db->set('Unit', $result); 
$this->db->set('Owner', $user); 
$this->db->set('CreatedBy', $user); 
$this->db->set('ModifiedBy', $user); 
$this->db->insert('prod'); 
$this->db->select('ID'); 
$this->db->from('type'); 
$this->db->where('%'.$unit.'% = type.code'); 

$id = $this->db->insert_id(); 

return (isset($id)) ? $id : FALSE; 

我不知道爲什麼我不能用ID從表type的值設置表Unit當我有where子句中的條件。

有人可以幫助我嗎?

+0

什麼框架?笨?你是不是故意用'type.code'的值來設置'Unit'列,因爲如果'Unit'是一個表,那麼你就錯了。 – Prix

+0

是的,codeigniter。當$ outputunit等於表類型的列代碼的值時,使用表類型的列ID值設置Unit。 – user987654321

+0

你可以像我們一樣而不是在那裏 –

回答

1

我不確定代碼試圖完成什麼,但like()不需要包含%。如果您致電like('type.code', '%1234%'),查詢將有WHERE type.code LIKE '%\%1234\%%'。所以你可以寫$this->db->like('type.code', $unit);如果你只希望%只在一邊,或者你想明確,like()需要第三個參數,可以是'both','before','after''none'來指定插入%的位置。

這也許不是你唯一的錯誤:

$sql = $this->db->query("select ID from type WHERE code LIKE '%".$unit."%'"); 
$result = mysql_query($sql); 

The documentation$sql在上面的代碼將是一個結果對象,並呼籲它mysql_query()會有不可預知的結果。要獲得實際的結果對象,您應該調用$sql->result()(如果您希望獲得多行)或者只是調用$sql->row(),因爲它看起來像只查找一行。

$this->db->set('Unit', $result); 

在這裏,你要使用$result->ID(假設$result是行,而不是行的陣列)。設置單位$result不會工作。要麼它將Unit設置爲0,或者由於$resultstdClass對象而不是標量值的事實導致的其他無意值。

希望有所幫助。

0

重命名「type」表,類似code_type,看看它是否工作。