DraftCode Offline PHP IDE

PHPからデータベースに接続する

 まずは PHP を書くためのファイルを用意します。

 画面左下の新規ファイルの作成アイコンをタップすると「untitled.php」というファイルができますので、右にスワイプして「Rename」から「list.php」に変更します。

 まずは PHP のコードを書く準備をする。


<?php

?>

 データベースへの接続方法にはいくつかありますが、ここでは「PDO」(PHP Data Object)という方法を利用します。


<?php

// データベースへ接続する
$handle = new PDO('sqlite:Sample.db');

?>

 $handle という変数を用意して新しい接続なので new と書き、PDOでの接続なので PDO と書きます。その後ろは PDO の処理内容となりますので () で括って ;(セミコロン)で終わります。

 ()の中には、''(シングルクォート)で括って、SQLのシステム名である sqlite と書いて :(コロン)で区切ります。その後ろに作ったデータベースを指定するので ../test/Sample.db と書きます。

 忘れてはいけないのが、接続してデータの操作が終わった後には、データベースとの接続を終了させることです。PHPの場合、この終了する処理をしなくてもプログラムの終了時に自動的に接続は終了します。でも、省略するのは将来プログラミングに慣れてからの方がいいと思いますので、不慣れなうちは確実に接続を終了させておきましょう。


$handle = null;

 接続の時に使った変数 $handlenull を指定して、;(セミコロン)で終了します。

ここまでの全文


<?php

// データベースへ接続する
$handle = new PDO('sqlite:Sample.db');

// データベースとの接続を終了する
$handle = null;

?>

 ちなみに // スラッシュを2つ書いた後ろはコメント行と判断されてプログラムは無視します。後でメンテナンスする時などに書いたコードがどういった処理をするためのものかメモを残しておくと良いかと思います。

 次に PDO実行時のエラーモードを設定します。書いたコードに間違いがあった場合などにエラーメッセージを表示してくれます。


$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 接続の時に使った $handle にアロー演算子で setAttribute(属性を設定する)で、PDO::ATTR_ERRMODE(PDOのエラーレポートモード)の PDO::ERRMODE_EXCEPTION を設定します。

ここまでの全文


<?php

// データベースへ接続する
$handle = new PDO('sqlite:Sample.db');

// PDO実行時のエラーモードを設定する
$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// データベースとの接続を終了する
$handle = null;

?>

 次に try〜catch構文でエラーを表示する。

 まずは、try {} でデータベースの接続部分を囲みます。

ここまでの全文


<?php

try {
	// データベースへ接続する
	$handle = new PDO('sqlite:Sample.db');

	// PDO実行時のエラーモードを設定する
	$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	// データベースとの接続を終了する
	$handle = null;
}

?>

 続いて catch の部分を入力していきます。try {} の後ろに続けて catch と入力します。catch の後ろに条件を () に書きます。条件を満たした場合の処理は、その後ろの {} の中に書きます。


try {
	// 監視する処理部分
} catch (条件) {
	// 条件を満たした場合の処理
}

 ここでは、「エラーが発生した場合」に catch の処理を実行させたいので、条件に PDOException $e と入力します。PDOException は PDOが発生させるエラーの型で、PDOで接続した際に何らかの問題があった場合にエラーを発生させ、それを $e という変数に代入し catch で受け取るという仕組みです。

ここまでの全文


<?php

try {
	// データベースへ接続する
	$handle = new PDO('sqlite:Sample.db');

	// PDO実行時のエラーモードを設定する
	$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	// データベースとの接続を終了する
	$handle = null;
} catch (PDOException $e) {

}

?>

 続いて、catch の条件を満たした場合、ここでは「エラーと判断された時」の処理を作っていきます。


echo "エラー発生:" . $e->getMessage() . "<br>";

 エラーが発生していることを画面に表示するために、echo "エラー発生:" と入力します。さらにエラーの内容を表示するために .(ピリオド)で区切って $e->getMessage() と入力します。最後に "<br>" と入力してエラーの表示は終了です。

 catch のところで PDOException を代入する $e を用意しました。この $e の中にあるメッセージを取得する命令 getMessage() は、->(アロー演算子)を使って指定します。$e->getMessage() とすることでエラー発生時のメッセージを取得できます。

 $e->getMessage() は安全そうに見えますが、変数の安全性は担保されていませんので、htmlspecialchars 関数を指定しておきます。


echo "エラー発生:" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";

 htmlspecialchars 関数は、特殊文字を文字参照のコードに変換してくれますので悪意のある入力を防ぐことができます。

 ここでは htmlspecialchars(変換対象, 変換パターン, 文字コード) の引数のうち、第一引数「変換対象」は $e->getMessage()。第二引数「変換パターン」は ENT_QUOTES。第三引数「文字コード」は 'UTF-8'を指定しています。

ここまでの全文


<?php

try {
	// データベースへ接続する
	$handle = new PDO('sqlite:Sample.db');

	// PDO実行時のエラーモードを設定する
	$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	// データベースとの接続を終了する
	$handle = null;
} catch (PDOException $e) {
	// エラー内容を表示する
	echo "エラー発生:" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
}

?>

 これでエラー表示の処理が完成しましたが、エラーが発生したままプログラムが動作し続けると問題がありますので、命令を中止させるためにエラー表示の直後に die(); と入力して全ての処理を中止させましょう。

 ここでは便宜上データベースからのエラーを直接表示するようにしていますが、実際に公開するようなプログラムでは「ただいまアクセスできません。」といった一般的なエラーメッセージを表示して、裏側でログファイルにエラーの内容を書き出すといったことを行うと思います。

ここまでの全文


<?php

try {
	// データベースへ接続する
	$handle = new PDO('sqlite:Sample.db');

	// PDO実行時のエラーモードを設定する
	$handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

	// データベースとの接続を終了する
	$handle = null;
} catch (PDOException $e) {
	// エラー内容を表示する
	echo "エラー発生:" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>";
	
	// 全ての命令を中止する
	die();
}

?>