4

您好我想知道在安全问题方面使用 Codeigniters 活动记录类是否等同于使用准备好的语句?

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

?>

对比

 $data = array(
   'title' => 'My title' ,
   'name' => 'My Name' ,
   'date' => 'My date'
);

$this->db->insert('mytable', $data); 

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
4

2 回答 2

5

CI 不支持准备好的语句,但它支持查询绑定。查询绑定和准备好的语句都可以防止 sql 注入。但我更喜欢 AR,因为它易于使用。它还使查询更具可读性。

您可以查看此链接以获取更多详细信息。

并从此链接检查 CI Query Binding

于 2013-04-21T05:26:10.207 回答
0

直接回答问题。是的。

这两个语句都被转义,从而提供了免受注入攻击的安全性。CodeIgniter db insert 方法为您进行转义,而 php 准备好的语句自然包含转义。

请参阅有关 php 准备语句的此链接信息。

否则就速度、它们的运行方式等而言,这两个语句是不等价的。

侯赛因已经涵盖了其余部分。

于 2015-07-05T10:36:14.593 回答