2011-08-31 109 views
0

當我有一個內置的SQL查詢包含其中一個搜索值的括號時,我沒有得到我期待的結果。但是,如果我直接在數據庫上運行查詢,則返回預期結果。爲什麼CodeIgniter不能在包含括號的SQL查詢中返回結果?

此外,如果我的搜索不包含括號,它會正確返回預期結果。

CodeIgniter的模型功能:

function get_submodels($params) 
{ 
$sql = "SELECT DISTINCT(`a`.`submodel`), `a`.`model_id` FROM `models` AS `a`" 
. "LEFT JOIN `manufacturers` AS `b` ON `a`.`manufacturer` = `b`.`manufacturer_id`" 
. "WHERE `a`.`year` = ? AND `b`.`manufacturer` = ? AND `a`.`model` = ?" 
. "ORDER BY `a`.`submodel` ASC;"; 

$query = $this->db->query($sql, $params); 

return $query->result(); 
} 

工作查詢的一個例子:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'CHEVROLET' AND `a`.`model` = 'MONTE CARLO'" 

非工作查詢的一個例子:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'" 

我用$這個 - > db-> last_query(),查詢格式正確。即使複製最後一個沒有結果的查詢,並直接對數據庫運行它,也會得到預期結果。

+4

他們可能不是問題,但爲什麼使用'\ n'? –

+2

什麼是實際的錯誤輸出? – J0HN

+0

@Pekka新行不是必需的,而是phpMyAdmin如何從查詢運行中自動生成一個php字符串。 – Dan

回答

1

儘管運行$ this-> db-> last_query()並將查詢視爲正確,我決定啓用頁面上的分析。我的結果顯示了被編碼爲HTML實體的圓括號。

因此,查詢正在形成這樣的:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'" 

取而代之的是:

"... WHERE `a`.`year` = '2007' AND `b`.`manufacturer` = 'MERCEDES BENZ' AND `a`.`model` = 'CLK350 (W209)'" 

我解決了這個修改插入查詢使用這些列ヶ輛和更新現有的所有記錄。雖然我知道Codeigniter會轉義值,但我並不知道它會對它們進行編碼。

+0

+1以獲得更好的信息,並回來發佈答案。乾杯! – marramgrass

+0

很高興提供信息,只要我可以。我在這裏找到解決方案的運氣非常好,如果我自己想出了問題,我也可以提供一些問題。 – Dan

相關問題