我以前没有任何 PDO 经验,所以我的问题可能听起来太简单了。
我听说 PDO 在安全性方面比 mysql/mysqli 好几次,而且由于 Codeigniter 支持 PDO 驱动程序,我决定在我的新项目中进行更改。
但正如我所知,Codeingiter 不使用准备好的语句,并且(我认为)它错过了使用 PDO 的意义,这是正确的,并且它不安全吗?
所以我的问题是:使用带有codeigniter的PDO驱动程序被认为是不安全的吗?
而且,这是否意味着我必须自己照顾基本的安全?
我以前没有任何 PDO 经验,所以我的问题可能听起来太简单了。
我听说 PDO 在安全性方面比 mysql/mysqli 好几次,而且由于 Codeigniter 支持 PDO 驱动程序,我决定在我的新项目中进行更改。
但正如我所知,Codeingiter 不使用准备好的语句,并且(我认为)它错过了使用 PDO 的意义,这是正确的,并且它不安全吗?
所以我的问题是:使用带有codeigniter的PDO驱动程序被认为是不安全的吗?
而且,这是否意味着我必须自己照顾基本的安全?
所有查询调用都在简化函数中转义$this->db
,例如delete()
和get_where()
。这增加了一些自动化的安全性。
如果写得太草率,您可以授予用户访问权限以编辑其他用户的内容。因此,完全安全没有神奇的解决方案。您越详细,您的代码就越适合您。
如果您需要自定义查询,您可以这样做:
$int_user_id = 1;
$this->db->query("
SELECT *
FROM users
WHERE id = ?
", array($int_user_id));
注意:要实现IN ()
and LIKE
,您需要相应地转义,而不是通过array()
and插入?
。
1. Database Support
PDO 相对于 MySQL 的核心优势在于其对数据库驱动程序的支持。PDO 支持许多不同的驱动程序,如 CUBRID、MS SQL Server、Firebird/Interbase、IBM、MySQL 等。
2. Security
这两个库都提供 SQL 注入安全性,只要开发人员按照预期的方式使用它们。建议将准备好的语句与绑定查询一起使用。
3. Speed
虽然 PDO 和 MySQL 都非常快,但 MySQL 在基准测试中的执行速度却微不足道——非准备语句约为 2.5%,准备语句约为 6.5%。
据我所知(CodeIgniter newbie ;))它使用 ActiveRecords 很好地处理了安全问题。我不知道它是否使用 PDO,但它非常易于使用,查询看起来非常干净,并且具有查询缓存。