PDO
「PHPデータオブジェクト」です。私は主に PDO を使用しているため、そのメリットについてのみ話すことができます。
- MySQL だけでなく、より多くのデータベースで動作します (あなたには関係ないかもしれません)
- コンパイルされたCなので、より高速です(おそらく)
- 準備されたステートメント(ただし、他の人にはこれらがあります)
- SOはそれを気に入っているようですので、少なくともここで多くの助けを得ることができます
- オンザフライで設定および変更できるさまざまなフェッチ/エラー処理モード
あなたが尋ねる
では、PDO、準備済みステートメント、および MySQLi の違いは何ですか...
PDO
およびMySQLi
DB ラッパーです。「準備されたステートメント」はまったく別の概念です。複数回実行できるクエリを準備でき、適切にパラメータ化されたステートメントは SQL インジェクションに対して安全です (証明ではないかもしれませんが)。後者の理由は、PDO (または MySQLi) を使用する必要がある理由のほとんどですが、準備されたステートメントもクエリにある程度の明確さをもたらします。
/* mysql_* version */
mysql_connect("host");
$query = "SELECT column FROM db1.t1 WHERE id = ";
foreach ($_GET['id'] as $id) {
$id = mysql_real_escape_string($id);
$result = mysql_query($query . "'$id'";
while ($row = mysql_fetch_assoc($result)) {
echo "$row[column]\n";
}
}
//NOTE: it would probably be better to store the resource returned by
//mysql_connect and use that consistently (in query/escape)
/* PDO version */
$pdo = new PDO('mysql:host=HOST', 'user', 'pass');
$query = $pdo->prepare("SELECT column FROM db1.t1 WHERE id = ?";
foreach ($_GET['id'] as $id) {
$query->execute($id);
echo $query->fetch(PDO::FETCH_COLUMN);
}
//Notice that you skip the escape step.
で基本的に同じことができますが、私はの構文MySQLi
を好みます。PDO
それも速いかもしれませんが、私はそれを補うことができました。MDB2
めったに語られることのない PEAR もあります。PDO
が組み込まれているので、私はそれで行きます。