php - CodeIgniter PDO 驱动程序使用查询而不是准备?这不是更不安全吗?

标签 php codeigniter pdo codeigniter-2

我是 PHP CodeIgniter 框架的新手,正在研究版本 2.1.0 的 PDO 数据库驱动程序。我注意到它使用 PDO“查询”功能,而不是“准备”和“bindParam”/“bindValue”。

这难道不是完全错过了首先使用 PDO 的意义吗?实际上,与使用他们提供的普通 mysql 驱动程序相比,它对 sql 注入(inject)的保护更少。它似乎没有像其他提供的驱动程序那样逃避查询?或者我完全误解了某些东西?

编辑:看起来 CodeIgniter 实际上可能正在使用 PDO::quote 进行清理。但即使是 php 文档也表示不建议这样做,因为它不太安全,而且似乎一开始就错过了 PDO 的要点

最佳答案

我没有使用过 CodeIgniter,所以我实际上必须对此做一些研究。事实证明,CodeIgniter 确实提供了一种名为 Query Bindings 的参数化查询。 .

它的工作原理如下:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick')); 

根据文档:

The secondary benefit of using binds is that the values are automatically escaped, producing safer queries. You don't have to remember to manually escape data; the engine does it automatically for you.

尽管它抽象了准备好的语句功能,但对我来说很奇怪。我认为这已经是非常简单的了。呵呵:/

关于php - CodeIgniter PDO 驱动程序使用查询而不是准备?这不是更不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9765128/

相关文章:

php - 如何更改时间戳数据的时区

PHP 使用线程安全与否

php - 从数据库发送和检索数据并显示在选择框中,无需刷新 CodeIgniter 中的页面

php - 使用 PDO 设置 sqlite3 数据库路径

php - PDO 事务和函数调用

php - 单击链接时显示文本字段

javascript - 尝试使用 AJAX 将变量值从 JavaScript 传递到 PHP

php - 如何将模型存储在文件夹中

http - 选择 HTTP 状态代码

PHP PDO 强制 SQL99