Php 转换为mysql准备语句
我试图研究prepared语句在MySQL中是如何工作的,我被告知我使用的所有代码都容易受到MySQL注入的攻击,例如,我使用codeigniter php模型来编写这样的MySQL查询代码Php 转换为mysql准备语句,php,mysql,codeigniter,Php,Mysql,Codeigniter,我试图研究prepared语句在MySQL中是如何工作的,我被告知我使用的所有代码都容易受到MySQL注入的攻击,例如,我使用codeigniter php模型来编写这样的MySQL查询代码 public function getOpenLoans($id){ $query = 'select a.Amount as OpenLoanAmount , a.monthly_amortization as totalInstallment
public function getOpenLoans($id){
$query = 'select a.Amount as OpenLoanAmount , a.monthly_amortization as totalInstallment
from useropenloan a
where a.Owner = ' .$id. ' and UPDATE_DT is null' ;
$query = $this->db->query($query);
$result = $query->result();
return $result;
}
这基本上得到了一些信息,但我真正想知道的是如何
将其转换为准备好的mysql语句,我在stackoverflow和一些youtube教程中尝试了以下不同的方法,但它们不起作用,所以有人可以帮助我在准备好的sql语句中编写此代码
我是这样试的
$stmt = $conn->prepare(select a.Amount as OpenLoanAmount , a.monthly_amortization as totalInstallment
from useropenloan a
where a.Owner = :id and UPDATE_DT is null);
$stmt->bindParam(':id', $id);
$stmt->execute();
SQL是否有引号?@copynpaste在第二个prepareselect中。。。不,我没有使用任何引用添加它们,这只是一个string@copynpastearrite补充道,但我主要关心的是这是否有助于停止sql注入?您可以通过从查询字符串中删除值并使用参数来停止sql注入。但它仍然必须是字符串,否则它就不能工作。科宁,我使用的是codeigniter,因此出于某些原因,它停止在$conn,所以我应该使用$this->db->prepare吗?我假设$conn是一个现有的PDO连接。有关如何设置的详细信息,请参阅。这是我如何执行旧查询$query=$This->db->query$query$结果=$query->result;返回$result,所以它一定是以一种不同的方式,对吧?codeigniter已经提供了一种连接到数据库的方法,通过这个$this->db->等等。。。但是我试过使用它,但不起作用。我错过了关于CodeIgniter的部分。我已相应地更新了我的答案。
public function getOpenLoans($id){
$sql = "select a.Amount as OpenLoanAmount , a.monthly_amortization as totalInstallment from useropenloan a where a.Owner = ? and UPDATE_DT is null";
$query = $this->db->query($sql, array($id));
$result - $query->result();
return $result;
}