2010-02-06 58 views
2

比方說,我有一個查詢:MySQL查詢中的CodeIgniter與會話ID

" SELECT * FROM table 
     WHERE donor_id = " .$this->session->userdata('id') ." 
     GROUP BY rating" 

然而,看來我在這裏得到一個MySQL語法錯誤,理由是$this->session->userdata('id')給出了我的「25」,例如,而不是25.是否有任何解決方法可以阻止$this->session->userdata('id')被引用?

謝謝。

回答

1

intval($this->session->userdata('id'))

1

假設你的意思是它返回你一個字符串,而不是整數,你總是可以嘗試使用settypeintval

$var = '2'; 
settype($var, "integer"); 
$var = intval($var); 

但是,如果你的意思是引號是因爲某些原因在硬編碼,你可以做一個字符串替換,如果你是確保該值將不包含引號:

ech str_replace("'", "", "'2'"); // prints 2 
2

在CI,我做這一切的時候:

$id = intval($this->session->userdata('id')); 
$sql = " SELECT * ". 
     " FROM table ". 
     " WHERE donor_id = {$id} ". 
     "GROUP BY rating "; 
//process $sql below 

創建這樣的查詢會使你更容易發現錯誤,防止SQL注入。當您需要將查詢拆分爲多行而不是使其成爲一個很長的多字符串時,請使用串聯來防止實際查詢字符串變得太長。縮進SQL關鍵字是爲了更容易發現點邏輯和語法錯誤。