初めてのPHP ④。簡単にデータベースが使えるように設定しよう

初めてのPHP ④。簡単にデータベースが使えるように設定しよう
この記事はこんな悩みを解決します
  • データベースを簡単に使えるようにしたい
  • データベースへのセキュリティーを強化したい
  • PHPの勉強がしたい

前回の記事でデータベースの使い方について紹介しました。しかし、データベースを使うときに長々と書いていると不便ですし、コードが見難くなってしまいます。Webアプリにとってデータベースはなくてはならないと言っても過言ではないです。そのデータベースを簡単に使えるように設定しておくと開発のスピードも上がります。

この記事を読むことで簡単にデータベースを扱う設定方法がわかります。

初めてのPHP ④。簡単にデータベースが使えるように設定しよう

前回の記事では下記のようにしてデータベースにアクセスしていました。

<?php

	try{
		$pdo = new PDO('mysql:host=127.0.0.1;dbname=PHP_study', 'root', '1234');
	}catch(PDOException $e){
		die('接続できません');
	}

	$state = $pdo->prepare('select * from Comment');
	$state->execute();
	$Comments = $state->fetchAll(PDO::FETCH_OBJ);

	require 'view.php';
?>

しかし、これではテーブル名が変わった時などに対応できません。それに何と言っても見難いです。そのため、下記のようなファイルを作って行きます。

データベースを簡単に使うためのファイル
  • データベースと接続するためのファイル(Connection.php)
  • テーブルから情報を抽出するファイル(Query.php)
  • 上記の2つをまとめて管理するファイル(bootstrap.php)

まずは、データベースと接続するためのファイルから作って行きます。

Connection.php

<?php

class Connection{
	public static function make(){
		try{
			return new PDO('mysql:host=127.0.0.1;dbname=PHP_study', 'root', '1234');
		}catch(PDOException $e){
			die($e->getMessage());
		}
	}
}

public static functionにすることでクラスをインスタンス化(new 〇〇)しなくてもmakeメソッドが使えるようになっています。
ちなみに、このmakeメソッドを使うときには下記のように唱えます。

Connedtion::make();

Query.php

では、Connection.phpでデータベースとの接続ができたのでQuery.phpでデータを抽出して行きます。

<?php

class Query{

	protected $pdo;

	public function __construct($pdo){
		$this->pdo = $pdo;
	}

	public function selectAll($table){
		$state = $this->pdo->prepare("select * from {$table}");
		$state->execute();
		return $state->fetchAll(PDO::FETCH_OBJ);
	}
}

__construct($pdo)でnew Query($pdo)したときに引数として渡された$pdoをセットするようにします。
さらに、selectAll($table)で指定したテーブルから全てのデータを抽出するようにしています。

bootstrap.php

では、この2つをまとめる処理を書いて行きましょう。

<?php

require 'database/Connection.php';
require 'database/Query.php';

return new Query(
	Connection::make()
);

bootstrap.phpが呼び出されたらnew Queryして引数にデータベースに接続するConnection::makeを使っています。これがQueryのなかの$pdoとしてセットされselectAllが使える状態になります。

つまり、bootstrap.phpを呼び出すだけでselectAllが使える状態になったということです。

index.php

では、index.phpでCommentテーブルの全てのデータを抽出するように書いてみましょう。

<?php

	$database = require 'bootstrap.php';

	$Comment = $database->selectAll('Comment');

	require 'view.php';

これでview.phpで$Commentが使えるようになりました。あとは前回の記事のようにforeachで抽出したり何なりとしていけます。

最初よりはだいぶスッキリしたように思います。さらに、次に違うテーブルのデータをとってくるときにもselectAllの引数を別のテーブル名に変えるだけなので簡単ですね。

設定を別のファイルに記入しよう

今回、Connestion.phpに下記のように記述しました。

try{
		return new PDO('mysql:host=127.0.0.1;dbname=PHP_study', 'root', '1234');
}catch(PDOException $e){
		die($e->getMessage());
}

しかし、これではユーザー名やパスワードなど重要な情報に対してのセキュリティーが甘くなってしまいます。

重要な情報だけ別のファイルに格納してパーミッションで制限してやるのが良いでしょう。

ということで、config.phpというファイルを作って重要な情報を入れて行きます。

config.php

<?php

return[
	'database' => [
		'name' => 'PHP_study',
		'username' => 'root',
		'password' => '1234',
		'connection' => 'mysql:host=127.0.0.1',
		'option' => []
	]
];

config.phpにアクセスが来たら配列を返すように設定しています。これを使えるようにbootstrap.phpとConnection.phpを編集して行きます。

bootstrap.php

<?php

$config = require 'config.php'; //追加
require 'database/Connection.php';
require 'database/Query.php';

return new Query(
	Connection::make($config['database']) //追加
);

config.phpを読み込み配列を$configに渡しています。さらに、データベースにアクセスするときには$configの中のdatabaseを使うように指定しています。

Connection.php

<?php

class Connection{
	public static function make($config){
		try{
    // return new PDO('mysql:host=127.0.0.1;dbname=PHP_study', 'root', '1234');
			return new PDO(
				$config['connection'].';dbname='.$config['name'],
				$config['username'],
				$config['password']
			);
		}catch(PDOException $e){
			die($e->getMessage());
		}
	}
}

同じ処理を$configを使って書いて行きます。この$configはdatabaseの配列を意味しているので必要なキーを書いていくだけで良いですね。

これで後はこのファイルに対してセキュリティーをかけるだけです。

まとめ

今回はデータベースに簡単にアクセスするための設定方法とセキュリティー対策を行いました。

データベースにアクセスするコードは頻繁に出て来ますのであまり考えなくても使えるようにしておくと開発が捗ります。

関連記事