一尘不染

SQL查询转义+ Codeigniter

sql

我使用的是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).")";

但是我在正确使用语法上遇到了麻烦。错误消息是:

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

阅读 210

收藏
2021-03-10

共1个答案

一尘不染

$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);

如果您要选择$ id给出的用户语言,则应该采用这种方式。

处理数字的替代方法是:

$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;

codeigniter还支持将准备好的语句作为“查询绑定”:

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

2021-03-10