12

今から私はmysql代わりに古いものを使用していて、PDO切り替える理由について多くの推奨事項を見てきましたがPDO、多くの異なる事実(ここでもSOについて)、例:

  • 述べることPDOは少し速い/少し遅い
  • 言うPDOことはSQLインジェクションを防ぐのに役立ちますが、準備されたクエリを使用する場合に限ります
  • また、準備されたクエリを使用するのは非常に遅いので悪いと言っています

それで、実際には何が本当ですか?特に、使用する場合のベストプラクティスは何でPDOあり、速度とセキュリティの両方が非常に重要です。高速クエリを使用しながらSQLインジェクションから身を守るにはどうすればよいでしょうか。

4

2 に答える 2

20

データベースのサポート

MySQL に対する PDO の主な利点は、データベース ドライバーのサポートにあります。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 対 MySQL

さらに参照するためのいくつかのリンク
MySQL と PDO (Stackoverflow)
データベース アクセスに PDO を使用する必要がある理由 (net.tutsplus.com)

于 2012-06-30T21:23:21.437 に答える
0

ほとんどの場合、開発速度 (ソフトウェアの作成にかかる時間) は、パフォーマンスのわずかな改善よりもはるかに重要です。

PDO を使用し、準備されたクエリで使用することをお勧めします。Twitter や Google を使用していない限り、パフォーマンスの違いに少しでも気付くことはまずありません。

于 2012-06-30T21:19:51.990 に答える