2014-12-02 216 views
0

我想用codeigniter來運行sql查詢,但由於查詢中的單引號而無法獲得成功。以下是我的查詢:從sql查詢中刪除單引號

function getStaffUser($uid, $participant_list=0) { 

$rid='1,2,3'; 
$where = "FIND_IN_SET(users.role_id, '".$rid."')"; 
$where_plist = "NOT FIND_IN_SET(users.uid, '".$participant_list."')"; 

$this->db->select("users.uid, CONCAT(`users`.`given_name`, ' ',`users`.`surname`) as 'user_name'", false); 
$this->db->from('users'); 
$this->db->where($where); 
$this->db->where("users.uid!=", $uid, false); 
if($participant_list!=0){ 

$this->db->where($where_plist, false);  
} 
$data = $this->db->get(); 

pr($this->db->last_query()); exit; 
if ($data->num_rows() == 0) 
    return false; 
else 
    return $data->result(); 

}

它返回下面的查詢:

SELECT users.uid, CONCAT(`users`.`given_name`, ' ', `users`.`surname`) as 'user_name' FROM (`users`) WHERE FIND_IN_SET(users.role_id, '1,2,3') AND users.uid!=1 AND `NOT` FIND_IN_SET(users.uid, '1,18,60') 

但是,查詢是除單引號僅在過去的'NOT'無一不精。如果刪除那個單引號並運行在sqlyog它工作正常。

因此,刪除它的最好方法是什麼。我試圖使用false,但它也沒有工作。

ANy help?

謝謝。

+0

Downvoted? :S我看不出有什麼問題。我一直試圖尋找解決方案,但沒有取得成功,最終我在這裏提出,以便獲得一些幫助。如果問題出現問題,我們將不勝感激。 THanks – 2014-12-02 00:50:21

+0

你需要設置'$ this-> db-> where('where_plist',NULL,FALSE);'**而不是**'$ this-> db-> where($ where_plist,false); ' – 2014-12-02 05:17:42

回答

1

你應該能夠簡單地使用!,像這樣:

$where_plist = "! FIND_IN_SET(users.uid, '".$participant_list."')"; 

NOT!是別名:http://dev.mysql.com/doc/refman/5.1/en/logical-operators.html#operator_not

+0

結果仍然包含單引號。喜歡這個 '!'這可以防止sql將其識別爲非運算符。 – 2014-12-02 01:03:09

+1

嗯,以及如何在PHP中執行FIND_IN_SET事情,甚至沒有在查詢中使用它?我知道這不是一個直接的解決方案,但你應該考慮它。我記得在CI的日子裏,我有很多情況下必須避免使用Active Records ... – Shomz 2014-12-02 01:22:41

+1

這看起來像唯一的解決方案。不管怎麼說,還是要謝謝你。 – 2014-12-02 04:26:00