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'))
答
假设你的意思是它返回你一个字符串,而不是整数,你总是可以尝试使用settype
或intval
:
$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关键字是为了更容易发现点逻辑和语法错误。