DB: 2006年1月アーカイブ

PDO関数 単純な接続

| | コメント(2)

実際に MySQL サーバーに接続しデータを取得してみます。 サンプルではホスト名 localhost に接続し、testdb データベースの testtable テーブルにある全ての行を取得します。

<html><head><title>PDO サンプル - 接続テスト</title></head>
<body>
<style type="text/css">
table { border-collapse: collapse; }
caption { font-weight: bold; }
th, td { padding: 0.2em 1em; border: 1px solid gray; }
th { background-color: whitesmoke; border-bottom-width: 2px; }
td.id { text-align: center; }
col.id { background-color: aliceblue; }
</style>

<?php
/**
 * DSN (Data Source Name) です。
 * PDO は DSN を元に DB へ接続します。
 *
 * 'mysql:localhost; dbname=testdb;' の場合、
 * MySQL 用の PDO ドライバを使用し、
 * ホスト名 "localhost" にある MySQL サーバに接続し、
 * デフォルトで使用するデータベースは "testdb" とします。
 *
 * 書式は使用する PDO ドライバによって異なります。
 * 詳しくは PDO ドライバ毎のマニュアルを参照下さい。
 * http://www.php.net/manual/en/ref.pdo.php#pdo.drivers
 */
$dsn = 'mysql:host=localhost; dbname=testdb;';

/**
 * DB サーバの接続に使用するユーザ名です。
 */
$userName = 'username';

/**
 * DB サーバの接続に使用するパスワードです。
 */
$password = 'password';

try
{
	// 接続を確立します。
	//
	// なんらかの理由により接続出来なかった場合、
	// PDOException 例外が発生します。
	$connection = new PDO($dsn, $userName, $password);
	
	// 接続毎の設定を行います。
	//
	// PDO::ATTR_ERRMODE 定数は「エラーが発生した時の通知方法を設定する」を示し、
	// PDO::ERRMODE_EXCEPTION 定数は 「例外を発生させる」を示します。
	//
	// もし例外ではなく E_WARNING エラーを発生させたい時は
	// $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
	// とします。
	//
	// setAttribute メソッドに渡せる定数はこちらを参照下さい。
	// http://www.php.net/manual/en/function.pdo-setattribute.php
	$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
	// 接続に対しコマンドを発行します。
	// PDO::query メソッドはステートメント実行後の結果セットを表す
	// PDOStatement オブジェクトを返します。
	//
	// なんらかの理由によりエラーが発生した時、
	// PDO::ATTR_ERRMODE の値にそってエラーが通知されます。
	// デフォルト、もしくは値が PDO::ERRMODE_SILENT の場合エラーは通知されず、
	// 代わりに戻り値が false となります。
	// このスクリプトでは PDOException 例外が発生します。
	//
	// // デフォルト動作時のエラーチェック
	// $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
	// $statement = $connection->query('でたらめSQL');
	// if ($statement === false)
	// {
	//     trigger_error('よくわからないけどダメだった', E_USER_WARNING);
	// }
	$statement = $connection->query('select * from `testtable`');
	
	// 結果セットが表すデータの取得方法を設定します。
	// PDO::FETCH_NAMED 定数は「カラム名を添え字にした配列として受け取る」を
	// 表します。
	$statement->setFetchMode(PDO::FETCH_NAMED);
	
	// 結果を取得します。
	echo '<table summary="testtable の中身">';
	echo '<caption>testtable の中身</caption>';
	echo '<col class="id" /><col class="name" /><col class="tel" />';
	echo '<thead><tr><th>ID</th><th>Name</th><th>Tel</th></tr></thead>';
	echo '<tbody>';

	while (($row = $statement->fetch()) !== false)
	{
		echo '<tr>';
		echo '<td class="id">' . htmlspecialchars($row['Id']) . '</td>';
		echo '<td class="name">' . htmlspecialchars($row['Name']) . '</td>';
		echo '<td class="tel">' . htmlspecialchars($row['Tel']) . '</td>';
		echo '</tr>';
	}
	
	echo '</tbody>';
	echo '</table>';

	// 接続を切断します。
	//
	// PDO クラスには明示的に切断するメソッドが無く、
	// オブジェクトが破棄される時に切断されます。
	// 通常スクリプト終了時にオブジェクトも破棄されますので
	// 明示的に切断する必要はありません。
	//
	// もしスクリプトの途中で切断が必要になった時は、
	// オブジェクトを GC(ガベージ コレクト) によって破棄する必要があります。
	// GC とは、不要になった資源(メモリ・各種接続等)を開放する PHP の機能です。
	// PDO オブジェクトを GC の対象にさせるには、PDO オブジェクトを参照している
	// 変数を削除するか、NULL 等を代入してオブジェクトへの参照をなくします。
	//
	// unset($connection);
	// $connection = null;
	// $connection = "お前など絶縁だ!";
	//
	// これらは全て PDO オブジェクトを破棄させるのに有効です。
}
catch (PDOException $e)
{
	echo "エラー: " . $e->getMessage();
}

?>

</body></html>

実行結果のイメージです。
実行結果のイメージ

続く...

このアーカイブについて

このページには、2006年1月以降に書かれたブログ記事のうちDBカテゴリに属しているものが含まれています。

前のアーカイブはDB: 2005年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

DB: 2006年1月: 月別アーカイブ

Powered by Movable Type 4.12