如何在codeigniter php mysql中安全地将查询作为字符串调用到其他函数中

如何在codeigniter php mysql中安全地将查询作为字符串调用到其他函数中,php,mysql,codeigniter,mysqli,Php,Mysql,Codeigniter,Mysqli,我使用的是codeigniter,我在单独的公共函数中编写了多个查询。然后,我想使用这些查询中的每一个,并在另一个查询中将它们作为字符串调用以处理它们 这就是我的意思 public function first_of_many_queries(){ $query = " SELECT * FROM users WHERE id = $id AND a

我使用的是codeigniter,我在单独的公共函数中编写了多个查询。然后,我想使用这些查询中的每一个,并在另一个查询中将它们作为字符串调用以处理它们

这就是我的意思

public function first_of_many_queries(){

    $query = "  
                SELECT *
                FROM users
                WHERE id = $id 
                AND   age = $age 
                AND   gender = $gender 
                ORDER BY id DESC LIMIT 0, 1 
            ";

    return $this->db->escape_str($this->handeling_all_queries($query, 1));

}    

public function handeling_all_queries($qry, $type){

    $query = $this->db->query($qry);

    if ($query->num_rows() > 0){
        //doo stuff
    }

}
我的问题是

这是安全的做法吗?使用
$this->db->escape\u str($this->处理所有查询($query,1))
是否足以防止sql注入和其他问题


谢谢

不,不安全。使用PDO准备的语句进行安全查询:

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ? AND age = ? AND gender = ? ORDER BY id DESC LIMIT 0, 1");
$stmt->execute([$id, $age, $gender]);

是的,一点也不安全。您可以在Codeigniter中使用查询绑定

绑定查询是另一个有用的安全过程;如果使用绑定 通过查询,CodeIgniter会自动转义值, 而且您不需要手动执行此操作

$query = "SELECT * FROM users WHERE id = ? AND age = ? AND gender = ? ORDER BY id DESC LIMIT 0, 1";
$this->db->query($query, $id, $age , $gender);

我知道你已经问了两个关于绑定的问题。你不是无知的。因此,不,这是不安全的,而且您的代码似乎未经测试且无效。最好先读一本好的教程。@KIKOSoftware-你能告诉我正确的方向吗?我已经阅读了CodeIgniter提供的许多文档,并阅读了许多论坛,但没有人涉及此类主题。我已经找了好几天了,但我的搜索仍然没有进展,因此问了两次:(好吧,为了保证查询的安全,您必须使用绑定,而不是将PHP变量直接插入查询字符串中。因此,您不能像您所希望的那样在函数中使用插入的变量构建完整的查询字符串。我不应该这样说,但在某些特殊情况下,您完全可以控制变量的值,您可以将其直接插入到查询字符串中。(不要告诉任何人:我没有这么说!)请在给出答案时详细说明答案。使用链接只是为了提供参考,而不是仅基于链接。谢谢,但我不是问如何绑定查询。我是问我是否可以在一个查询中转义查询字符串,然后在另一个查询中调用它,使用CodeIgniter的
$this->db->escape\u str
谢谢,但我不能使用第二个查询中的查询字符串(作为字符串)如果我在第一个查询中找到它。请再次查看该问题谢谢您的回答。因此,您基本上希望通过一个可以转义的公共函数来保护或转义各种函数中的原始查询。留给您的选项是手动转义每个查询中的变量。例如:
$sql=“从id=”、“$this->db->escape_str($id)”、“$age=”、“$this->db->escape_str($age)”、“‘性别=”、“$this->db->escape_str($gender)”、“‘按id排序说明限制0,1”;