【问题标题】:Codeigniter DB class vs prepared statementsCodeigniter DB 类与准备好的语句
【发布时间】:2013-04-14 05:27:13
【问题描述】:

您好,我想知道在安全问题方面,使用 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')

【问题讨论】:

    标签: php mysql codeigniter pdo mysqli


    【解决方案1】:

    直接回答问题。是的。

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

    查看link php 准备语句的信息。

    否则在速度、运行方式等方面,这两个语句是不等价的。

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

    【讨论】:

      【解决方案2】:

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

      您可以查看link了解更多详情。

      并从此link检查 CI 查询绑定

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 2014-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多