【问题标题】:MySQL Query in CodeIgniter with Session IDCodeIgniter 中的 MySQL 查询与会话 ID
【发布时间】:2010-02-06 04:11:04
【问题描述】:
假设我有一个查询:
" SELECT * FROM table
WHERE donor_id = " .$this->session->userdata('id') ."
GROUP BY rating"
但是,我似乎在这里遇到了一个 mysql 语法错误,例如 $this->session->userdata('id') 给了我“25”而不是 25。这里有什么解决方法可以防止 $this->session->userdata('id') 被引用吗?
谢谢。
【问题讨论】:
标签:
php
codeigniter
mysql
【解决方案1】:
在 CI 中,我一直这样做:
$id = intval($this->session->userdata('id'));
$sql = " SELECT * ".
" FROM table ".
" WHERE donor_id = {$id} ".
"GROUP BY rating ";
//process $sql below
创建这样的查询将使您更容易发现错误并防止 SQL 注入。当您需要将查询拆分为多行而不是使其成为一个长的多个字符串时,使用连接是为了防止实际的查询字符串变得太长。缩进 SQL 关键字是为了更容易发现逻辑和语法错误。
【解决方案2】:
intval($this->session->userdata('id'))
【解决方案3】:
假设你的意思是它返回一个字符串而不是一个整数,你总是可以尝试使用 settype 或 intval:
$var = '2';
settype($var, "integer");
$var = intval($var);
但是,如果您的意思是引号由于某种原因被硬编码,您可以进行字符串替换,如果您确定该值不包含引号:
ech str_replace("'", "", "'2'"); // prints 2