接続は、PDO 基本クラスのインスタンスを作成することによって確立されます。どのドライバーが使用されるかに関係なく、PDO クラス名が使用されます。コンストラクターは、データベース ソース (いわゆる DSN) と、場合によってはユーザー名とパスワード (存在する場合) を指定するパラメーターを受け取ります。
例 #1 MySQL への接続
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?>
接続エラーがある場合、PDOException 例外オブジェクトがスローされます。エラー条件を処理したい場合は、例外をキャッチすることも、 set_Exception_handler() を介して設定されたアプリケーションのグローバル例外ハンドラーに例外を任せることも選択できます。
例 #2 接続エラーの処理
<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); foreach($dbh->query('SELECT * from FOO') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
アプリケーションが PDO コンストラクターで例外をキャッチしない場合、zend エンジンが実行するデフォルトのアクションはスクリプトを終了してバックトレースを表示することですが、このバックトレースにより完全なデータベース接続が漏洩する可能性があります。ユーザー名やパスワードなどの詳細。したがって、例外を明示的 (catch ステートメント経由) または暗黙的 (set_Exception_handler() 経由) でキャッチする必要があります。
データの接続が成功すると、PDO クラスのインスタンスがスクリプトに返されます。この接続は、PDO オブジェクトのライフサイクル中アクティブなままになります。接続を閉じるには、オブジェクトを破棄して、そのオブジェクトへの残りの参照がすべて削除されるようにする必要があります。オブジェクト変数に NULL 値を割り当てることができます。これを明示的に行わないと、PHP はスクリプトの最後で接続を自動的に閉じます。
例 #3 接続を閉じる
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); // 在此使用连接 // 现在运行完成,在此关闭连接 $dbh = null; ?>
多くの Web アプリケーションは、データベース サービスへの永続的な接続を使用することで恩恵を受けます。永続的な接続はスクリプトの終了後も閉じられず、同じ資格情報を使用する別のスクリプト接続要求が行われたときにキャッシュされて再利用されます。永続的な接続キャッシュを使用すると、スクリプトがデータベースと通信する必要があるたびに新しい接続を確立するオーバーヘッドが回避されるため、Web アプリケーションが高速になります。
例 #4 永続的な接続
<?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array( PDO::ATTR_PERSISTENT => true )); ?>
永続的な接続を使用する場合は、PDO コンストラクターに渡されるドライバー オプション配列で PDO::ATTR_PERSISTENT を設定する必要があります。オブジェクトの初期化後にこの属性が PDO::setAttribute() で設定された場合、ドライバーは永続的な接続を使用しません。
PDO ODBC ドライバーを使用し、ODBC ライブラリが ODBC 接続プーリングをサポートしている場合 (unixODBC と Windows の 2 つのアプローチがあり、さらに多くのアプローチがある場合もあります)、永続的な PDO 接続を使用せず、接続キャッシュをODBC 接続プール層。 ODBC 接続プールはプロセス内の他のモジュールと共有されます。PDO が接続をキャッシュするように要求された場合、接続は ODBC 接続プールに戻されず、他のモジュールにサービスを提供するために追加の接続が作成されます。