PHPプログラミング

ベストプラクティス

データベース PDO その6

PDOでデータを取得(SELECT)

  • このエントリーをはてなブックマークに追加

今回はデータベースの基本操作である生成(INSERT)、参照(SELECT)、更新(UPDATE)、削除(DELETE)のうち、PDOで参照(SELECT)を行う方法です。MySQL、PostgreSQL、SQLiteの3種類のデータベースを使いながら解説します。

目次

  1. #  PDOを使ってデータを取得する
  2. #  データを取得する流れを確認
  3. #  MySQLでデータを取得する
  4. #  PostgreSQLでデータを取得する
  5. #  SQLiteでデータを取得する

PDOを使ってデータを取得する

今回はデータベースに登録されたデータを取得する方法について解説します。
次のような方が対象です。

  • データベースに登録したデータを取得したい
  • データベースからデータを取得する基本的なSQLを確認したい

前提として、データベースには「test」データベースがあり、次の構造を持ったテーブルがあることとします。

テーブル名:user_list
カラム名 その他
id 整数 主キー
name 文字列
age 整数
registry_datetime 日付(またはタイムスタンプ)

PDO自体の基本的な内容については「PDOについて」を、データベースへの接続方法については「PDOを使ってデータベースへ接続」をご覧ください。

データを取得する流れを確認

3種類のデータベースからそれぞれデータを取得していきますが、実は実行するSQLや全体の流れは全て同じです
そこでまずはデータ取得の部分のみ確認してしまいましょう。

データを取得するコード例

// SQL文を作成
$sql = "SELECT * FROM user_list";

// クエリ実行(データを取得)
$res = $dbh->query($sql);

上記SQLを実行すると$resに取得したデータが格納されます。
もしクエリの実行に成功したらPDOStatementオブジェクトが入り、失敗してしまったらfalseが入ります。

テーブルにデータが入っていなかったり、条件にあうデータがなく1件もデータを取得できなかった場合についても、SQLの実行自体が成功していればPDOStatementオブジェクトを取得します。

MySQLでデータを取得する

まずはMySQLからデータの取得をしていきます。

先ほどご紹介したデータの取得するコードを実用的にすると次のようになります。
DBの接続と解除、データベースの処理をtry文で囲む部分については「PDOを使ってデータベースへ接続」でご紹介したものをそのまま使っています。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("mysql:host=127.0.0.1; dbname=test; charset=utf8", 'username', 'password');

	// SQL作成
	$sql = "SELECT * FROM user_list";

	// SQL実行
	$res = $dbh->query($sql);

	// 取得したデータを出力
	foreach( $res as $value ) {
		echo "$value[name]<br>";
	}

} catch(PDOException $e) {
	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

データを無事に取得できた場合はforeach文の中のechoによって「名前」が出力されます。

出力例

テスト太郎
テスト二郎
テスト健太

$valueの後ろに<br>タグがあることで、1つ1つのデータが改行されて出力されます。
以上がMySQLでのデータ取得です。

PostgreSQLでデータを取得する

続いて、PostgreSQLでデータの取得をします。
コードはデータベース接続の箇所以外、MySQLと同様の内容です。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("pgsql:host=127.0.0.1; dbname=test;", 'username', 'password');

	// SQL作成
	$sql = "SELECT * FROM user_list";

	// SQL実行
	$res = $dbh->query($sql);

	// 取得したデータを出力
	foreach( $res as $value ) {
		echo "$value[name]<br>";
	}

} catch(PDOException $e) {
	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

以上がPostgreSQでのデータ取得です。

SQLiteでデータを取得する

最後にSQLiteでデータの取得を行います。
全体の流れはデータベースの接続以外、上記2つのデータベースと同じ内容です。

index.php

<?php

// 変数の初期化
$sql = null;
$res = null;
$dbh = null;

try {
	// DBへ接続
	$dbh = new PDO("sqlite:./sqlite/test.sqlite3");

	// SQL作成
	$sql = "SELECT * FROM user_list";

	// SQL実行
	$res = $dbh->query($sql);

	// 取得したデータを出力
	foreach( $res as $value ) {
		echo "$value[name]<br>";
	}

} catch(PDOException $e) {

	echo $e->getMessage();
	die();
}

// 接続を閉じる
$dbh = null;

以上、SQLiteでのデータ取得でした。

SELECT文で使うことのできるWHERE句ORDERBY句は上記のデータベースで共通して使うことができます。
ただしデータの「型」の扱い方がそれぞれ異なるため、詳細な条件を指定したい場合などは利用するデータベースの特徴に合わせなければならない点に注意してください。

  • このエントリーをはてなブックマークに追加