あなたの質問はより一般的な概要を目的としていますが、現在の回答は詳細になるので、試してみます:
PDO クラスは、データベースと対話するために必要なすべての機能をカプセル化することを目的としています。これは、「メソッド」(関数の OO パーラー) と「プロパティ」(変数の OO パーラー) を定義することによって行われます。データベースと対話するために現在使用しているすべての「標準」関数の完全な代替としてそれらを使用します。
したがって、一連の「mysql_doSomething()」関数を呼び出して、その結果を独自の変数に格納する代わりに、PDO クラスからオブジェクトを「インスタンス化」します (「クラス」= 抽象定義、「オブジェクト」= 具体的な、使用可能なインスタンスクラスの)、そのオブジェクトのメソッドを呼び出して同じことを行います。
例として、PDO を使用しない場合、次のようにします。
// Get a db connection
$connection = mysql_connect('someHost/someDB', 'userName', 'password');
// Prepare a query
$query = "SELECT * FROM someTable WHERE something = " . mysql_real_escape_string($comparison) . "'";
// Issue a query
$db_result = mysql_query($query);
// Fetch the results
$results = array();
while ($row = mysql_fetch_array($db_result)) {
$results[] = $row;
}
これはPDOを使用した場合と同等ですが:
// Instantiate new PDO object (will create connection on the fly)
$db = new PDO('mysql:dbname=someDB;host=someHost');
// Prepare a query (will escape on the fly)
$statement = $db->prepare('SELECT * FROM someTable WHERE something = :comparison');
// $statement is now a PDOStatement object, with its own methods to use it, e.g.
// execute the query, passing in the parameters to replace
$statement->execute(array(':comparison' => $comparison));
// fetch results as array
$results = $statement->fetchAll();
したがって、一見すると、構文を除いて大きな違いはありません。しかし、PDO バージョンにはいくつかの利点があり、最大の利点はデータベースの独立性です。
代わりに PostgreSQL データベースと対話する必要がある場合は、インスタンス化呼び出しでのみ変更mysql:
します。古い方法では、すべての「mysql_doSomething()」関数を対応する「pg_doSomthing()」関数に置き換えて、すべてのコードを調べなければなりません (パラメータ処理の潜在的な違いを常にチェックします)。サポートされている他の多くのデータベース エンジンでも同じことが言えます。pgsql:
new PDO()
質問に戻ると、PDO は基本的に、同じことを達成するための別の方法を提供するだけでなく、いくつかのショートカット/改善/利点を提供します。たとえば、エスケープは、使用しているデータベース エンジンに必要な適切な方法で自動的に行われます。また、パラメーターの置換 (SQL インジェクションの防止、例には示されていません) ははるかに簡単で、エラーが発生しにくくなっています。
他の利点について理解するには、いくつかの OOP の基礎を読む必要があります。