首页 > 解决方案 > 当涉及限制语法时如何在codeigniter中绑定查询

问题描述

我正在使用codeigniter,并且为了安全起见,我正在尝试使用查询绑定来转义查询,但是我在使用限制语法时遇到了麻烦。

在我进一步解释之前,请查看下面的查询;

我的查询

   $query = "   
             SELECT * FROM messages 
             WHERE id = ? 
             AND public = ? 
             ORDER BY `messages`.`time` DESC LIMIT ?, ?
            ";

// Step one, escaping all queries          

   $bind  = array($id, $public, $start, $max); 
   $query = $this->db->query($query, $bind);        

// Step two, using the query above, and inserting it as a string into a "custom query handeler function"

   return $this->db->escape_str($this->handel_all_queries($query));

问题一:

所以,使用DESC LIMIT ?, ?给我一个错误。当它没有使用查询绑定进行转义时,它可以完美地工作(例如,如果我们将限制语法表示为DESC LIMIT $start, $max。但显然,这样做是不安全的,我希望像查询的其余部分一样转义它。

问题二:

然后我想在另一个处理所有查询调用的函数中使用“查询作为字符串”。该函数被调用handel_all_queries

而我用来尝试实现这一点的代码是 -> return $this->db->escape_str($this->handel_all_queries($query));。我想, $query 可以用作字符串来转移到下一个函数,但事实并非如此。

注意 简而言之,这是我想做的,但这些都是非常不受保护的。

$query = "   
            SELECT * FROM messages 
            WHERE id = $id 
            AND public = $public 
            ORDER BY `messages`.`time` DESC LIMIT $start, $max
            ";

return $this->db->escape_str($this->handel_all_queries($query));

提前致谢

标签: mysqlcodeigniter

解决方案


推荐阅读