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



我正在使用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_str($this->handeling_all_queries($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);

相关内容

  • 没有找到相关文章

最新更新