2016-07-06 20 views
1

問題是當字符串包含單詞'or'和'like'的組合時,活動記錄語句中的字符串會被轉義。下面是我用奇怪的Codigniter查詢轉義

$this->db->select('id'); 
$this->db->where('phrase', $phrase); 
$this->db->from('phrases'); 
$ret = $this->db->get(); 

這適用於普通字符串,但是當$短語遇到一個字符串像 故障代碼「點擊事件或訂房代碼,你想用。」 其中'或'和'喜歡'作爲單詞存在。

結果查詢會像

SELECT `id` FROM `phrases` WHERE `phrase` = 'Click on the Event or `Booking Code you` `would` like to use.' 

我不能禁用逃脫,因爲這來得心應手其他字符串。

+1

我個人發現CI的活動記錄API比它的價值更麻煩。正如你發現的那樣,它破壞了一些東西,並且無法處理複雜的查詢。你總是可以繞過它並使用'$ db-> query('sql here')' – Utkanos

+0

感謝提示@Utkanos。似乎這是唯一的解決方案clubbedbed手動轉義字符串使用$ this-> db-> escape($ phrase) – Sony

回答

0

我想你需要添加第三個參數到你的where子句來轉義值。

$this->db->select('id'); 
$this->db->where('phrase', $phrase, FALSE); 
$this->db->from('phrases'); 
$ret = $this->db->get(); 

manual

其中($鍵[,$值= NULL [,$逸出= NULL]])

參數:
$鍵(混合) - 現場比較,或關聯數組

$值(混合)的名字 - 如果一個鍵,相對於這個值

$逃生(布爾) - 無論是逃避值和標識符

更多信息在這個職位上Stack overflow

+0

我試過了,但代價是沒有轉義。從我的查詢中可以看到,我已經在不需要的地方獲得了一個轉義輸出。 – Sony