PDO - реальные факты и передовая практика?

С тех пор, как я использовал более старый mysql вместо PDO, и я видел много рекомендаций, почему нужно переключиться на PDO, однако также много разных фактов (также здесь, на SO), например:

  • stating PDO немного быстрее/немного медленнее
  • говоря PDO помогает предотвратить SQL-инъекции, но только если вы используете подготовленные запросы
  • а также использование готовых запросов плохо, так как это чертовски медленно

Итак, что на самом деле верно? В частности, каковы наилучшие методы использования PDO, а также как скорость, так и безопасность - как лучше всего защитить себя от SQL-инъекций при все еще быстрых запросах?

Ответ 1

Поддержка базы данных

Основное преимущество 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();

Speed ​​

В то время как 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

Несколько ссылок для дальнейших ссылок
fooobar.com/questions/337105/...
Почему вы должны использовать PDO для доступа к базе данных (net.tutsplus.com)

Ответ 2

В большинстве случаев скорость разработки (как долго это требуется для написания программного обеспечения) гораздо важнее, чем незначительные улучшения производительности.

Я рекомендую использовать PDO и использовать его с подготовленными запросами. Если вы не являетесь Twitter или Google, маловероятно, что вы даже будете немного осведомлены о различиях в производительности.