cho*_*wwy 5 php mysql sql codeigniter codeigniter-2
我正在使用codeigniter,并且大部分时间都使用活动记录进行查询(自动转义它们),但由于变量,此查询似乎并不适合它.所以我需要弄清楚如何手动转义查询.
Codeigniter文档建议以这种方式转义查询:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
Run Code Online (Sandbox Code Playgroud)
我的原始查询
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}'";
Run Code Online (Sandbox Code Playgroud)
我的转义查询
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")";
Run Code Online (Sandbox Code Playgroud)
但我无法正确使用语法.错误消息是:
Haj*_*ajo 12
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);
Run Code Online (Sandbox Code Playgroud)
如果你想选择$ id给出的用户语言,它应该这样工作.
处理数字的替代方案是:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
Run Code Online (Sandbox Code Playgroud)
codeigniter还支持预准备语句作为"查询绑定":
使用绑定的第二个好处是值会自动转义,从而产生更安全的查询.您不必记住手动转义数据; 引擎会自动为您完成.