Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转换为mysql准备语句_Php_Mysql_Codeigniter - Fatal编程技术网

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

我试图研究prepared语句在MySQL中是如何工作的,我被告知我使用的所有代码都容易受到MySQL注入的攻击,例如,我使用codeigniter php模型来编写这样的MySQL查询代码

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;
}