具有会话ID的CodeIgniter中的MySQL查询

时间:2010-02-06 04:11:05

标签: php codeigniter mysql

假设我有一个问题:

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

但是,似乎我在这里得到一个mysql语法错误,引用$this->session->userdata('id')给我'25',而不是25。这里是否有任何变通方法来阻止$this->session->userdata('id')被引用?

感谢。

3 个答案:

答案 0 :(得分:2)

在CI中,我一直这样做:

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

创建这样的查询将使您更容易发现错误并阻止SQL注入。当您需要将查询拆分为多行而不是使其成为长多字符串时使用连接是为了防止实际查询字符串变得太长。缩进SQL关键字是为了更容易发现逻辑和语法错误。

答案 1 :(得分:1)

假设你的意思是它返回一个字符串而不是一个整数,你总是可以尝试使用settypeintval

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

但是,如果你的意思是由于某种原因硬编码引号,你可以做一个字符串替换,如果你确定该值不包含引号:

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

答案 2 :(得分:1)

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