SQL查询转义+ codeigniter

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)

但我无法正确使用语法.错误消息是:

  • PHP错误消息:未定义的变量:user_language
  • SQL错误:语法错误...在第1行'VALUES(NULL)'附近

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还支持预准备语句作为"查询绑定":

使用绑定的第二个好处是值会自动转义,从而产生更安全的查询.您不必记住手动转义数据; 引擎会自动为您完成.