我正在使用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);