我使用的是codeigniter,大多数时候都使用活动记录进行查询(这会自动使它们转义),但是由于变量的原因,该查询似乎不太适合它。因此,我需要弄清楚如何手动转义查询。
Codeigniter文档建议以这种方式转义查询:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
我的原始查询
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}'";
我逃脱的查询
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")";
但是我在正确使用语法上遇到了麻烦。错误消息是:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);
如果您要选择$ id给出的用户语言,则应该采用这种方式。
处理数字的替代方法是:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
codeigniter还支持将准备好的语句作为“查询绑定”:
使用绑定的第二个好处是,这些值会自动转义,从而产生更安全的查询。您不必记住手动转义数据。引擎会自动为您完成。