从现在开始,我一直在使用旧的mysql
而不是,PDO
并且我已经看到了许多建议为什么要切换到PDO
,但是也有许多不同的事实(也在 SO 上),例如:
- 陈述
PDO
稍快/稍慢 - 说
PDO
有助于防止 SQL 注入,但前提是您使用准备好的查询 - 并且还说使用准备好的查询很糟糕,因为它非常慢
那么,什么是真实的呢?特别是,使用时的最佳实践是什么,PDO
速度和安全性都很重要——如何在保持快速查询的同时最好地保护自己免受 SQL 注入?
从现在开始,我一直在使用旧的mysql
而不是,PDO
并且我已经看到了许多建议为什么要切换到PDO
,但是也有许多不同的事实(也在 SO 上),例如:
PDO
稍快/稍慢PDO
有助于防止 SQL 注入,但前提是您使用准备好的查询那么,什么是真实的呢?特别是,使用时的最佳实践是什么,PDO
速度和安全性都很重要——如何在保持快速查询的同时最好地保护自己免受 SQL 注入?
PDO 相对于 MySQL 的核心优势在于其对数据库驱动程序的支持。PDO 支持许多不同的驱动程序,如 CUBRID、MS SQL Server、Firebird/Interbase、IBM、MySQL 等。
这两个库都提供 SQL 注入安全性,只要开发人员按照预期的方式使用它们。建议将准备好的语句与绑定查询一起使用。
// PDO, prepared statement
$pdo->prepare('SELECT * FROM users WHERE username = :username');
$pdo->execute(array(':username' => $_GET['username']));
// mysqli, prepared statements
$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?');
$query->bind_param('s', $_GET['username']);
$query->execute();
虽然 PDO 和 MySQL 都非常快,但 MySQL 在基准测试中的执行速度却微不足道——非准备语句约为 2.5%,准备语句约为 6.5%。
就像@DaveRandom 指出的那样,这是 PDO 的另一个特性,它比可怕的数字绑定要容易得多。
$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);
$pdo->prepare('
SELECT * FROM users
WHERE username = :username
AND email = :email
AND last_login > :last_login');
$pdo->execute($params);
很少有链接可供进一步参考
MySQL vs PDO (Stackoverflow)
为什么应该使用 PDO 进行数据库访问 (net.tutsplus.com)
在大多数情况下,开发速度(编写软件需要多长时间)比性能的微小改进更重要。
我建议使用 PDO,并将其与准备好的查询一起使用。除非您是 Twitter 或 Google,否则您几乎不可能意识到任何性能差异。