PDO - 真实的事实和最佳实践?

时间:2012-06-30 21:06:47

标签: php mysql database pdo database-connection

从现在开始,我一直在使用较旧的mysql而不是PDO,我看到了许多建议,为什么要切换到PDO,但也有很多不同的事实(也在这里SO),例如:

  • 说明PDO稍快/稍慢一点
  • PDO有助于防止SQL注入,但仅限于使用准备好的查询
  • 并且还说使用准备好的查询很糟糕,因为它太慢了

那么,究竟是什么呢?特别是,使用PDO时的最佳做法是什么,速度和安全性都很重要 - 如何在保持快速查询的同时最好地保护自己免受SQL注入?

2 个答案:

答案 0 :(得分:20)

数据库支持

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);

PDO vs MySQL

很少有链接供进一步参考 MySQL vs PDO (Stackoverflow)
Why you should be using PDO for database access (net.tutsplus.com)

答案 1 :(得分:0)

在大多数情况下,开发速度(编写软件需要多长时间)比对性能的细微改进更为重要。

我建议使用PDO,并将其与准备好的查询一起使用。除非你是推特或谷歌,否则你几乎不可能意识到任何性能差异。