MySQL查询中的CodeIgniter与会话ID

MySQL查询中的CodeIgniter与会话ID

问题描述:

比方说,我有一个查询: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')被引用?

谢谢。

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

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

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

但是,如果你的意思是引号是因为某些原因在硬编码,你可以做一个字符串替换,如果你是确保该值将不包含引号:

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

在CI,我做这一切的时候:

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

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