0
0

More than 1 year has passed since last update.

【PHP】PDOデータベースと接続する機能の解説

Last updated at Posted at 2023-08-25

以前PDOについてこんなツイートをしました。これだけだとなんとなく流れとPDOについてしかわからないと思うので記事にしました。もう少し詳しく説明していきます。

PDOは、PHP Data Objects の略で、どのデータベースを利用する場合でも同じ関数を使うことができ、もし将来データベースを変更することがあっても、 PDO オブジェクトを作成する時に指定したパラメータだけを変更するば良いです。

クラスの考え方

--class--
 変数/定数
 関数
----------

クラス(class)というのは、簡単に言うと

変数や定数、関数などをひとまとめにした物と考えておくとOKです。

PDOの場合は、データベースと接続するために、特化した機能です。

変数や関数はclassの中に入ると呼び方が変わる

変数や定数はclassの中に入ると呼び方が変わり、プロパティという呼び方に変わります。

関数はclassの中に入ると、メソッドという呼び方に変わります。

ただ呼び方が変わっただけで意味的には一緒になるので心配しないでください。

クラスの使い方

基本的にclassはそのままでは使えなくて、**instance化(実体化)**という手順をする必要があります。

クラスを使うnew(動的)

newという構文を使うことで、クラスを使える状態にする事ができます。

$pdo = new class名;
$pdo->プロパティ
$pdo->メソッド

new class名 を一旦変数 $pdo に入れて、プロパティ(変数)やメソッド(関数)を使っていくという形になります。

-> はアロー演算子と呼びます

配列の場合は => だったのですが

クラスの場合は -> のようになります。

クラスを使うsetatic(静的)

クラス名などに :: を使ってプロパティ(変数)、メソッド(関数)を使っていく方法もあります。

PDO::ATTR_ERRMODE
PDO::ERRMODE_EXCEPTION

クラスの中の変数や関数に static という物を付けておくと実行することができます。

:: はスコープ演算子と呼びます

手順

ファイルの作成

formフォルダ の中に db_connection.phpファイル を作成していきます。

form
  |
  |----> db_connection.php

インスタンス化

まずは、PDOを使うためにインスタンス化(実体)する必要があるのでまずはそちらを書いていきます。

form > db_connection.php

<?php

const DB_HOST = 'mysql:dbname=php_test;host=127.0.0.1;charset=utf8';
const DB_USER = 'php_user';
const DB_PASSWORD = 'SuTomSun0218';

$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);

説明

定数は const で始まります。定数は一般的にすべて大文字で書いていきますので今回は DB_HOST とします。

const DB_HOST = 'mysql:dbname=php_test;host=127.0.0.1;charset=utf8';
dbname=php_test; データベースの名前
host=127.0.0.1; 接続先(今回はローカルなので127.0.0.1)
charset=utf8 文字コード
const DB_USER = 'php_test';
php_test データベースにアクセスできるユーザー
const DB_PASSWORD = 'SuTomSun0218';
SuTomSun0218 php_userのパスワード

ここで設定されている情報は以下の記事で作成した情報になります。

$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);

PDOを実際にインスタンス化(実体)するために、DB_HOST、DB_USER、DB_PASSWORD の情報を PDO(引数) の引数の中に入れてあげています。

基本的にはこれでデータベースの接続ができるのですが、データベースが接続できない場合、プログラムがそのまま進んでしまうとまずいので、まずはデータベースが繋がっているかどうかのチェックをかけていく必要があります。

この際に使われるのが例外処理という物です。

例外処理 Exception

例外処理をするには、トライキャッチ構文を使って書いていきます。

form > db_connection.php

const DB_HOST = 'mysql:dbname=php_test;host=127.0.0.1;charset=utf8';
const DB_USER = 'php_test';
const DB_PASSWORD = 'SuTomSun0218';

try
{
    $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);
    echo '接続に成功しました。';
}
catch(PDOException $e)
{
    echo '接続に失敗しました。' . $e->getMessage() . "\n";
    exit();
}

説明

try{} は正常の処理

catch(){} もしエラーがでた場合の処理

try
{
    $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);
    echo '接続に成功しました。';
}

先ほど作成したPDOのインスタンス化(実体)するコードを try{} の中に切り取って貼り付けます。

catch(PDOException $e)
{
    echo '接続に失敗しました。' . $e->getMessage() . "\n";
    exit();
}

これはお決まりの書き方なのですが

catch(PDOException $e) PDOの場合は PDOException $e と書きます。

echo '接続に失敗しました。' . $e->getMessage() . "\n"; 表示させたい文字

$e->getMessage() というメソッドがあります。

\n で改行できます。

exit(); で処理を抜ける。

この書き方はデータベースと接続する時には、お決まりの書き方になります。

ローカルにアクセスして表示内容を確認してみましょう。

接続に成功していたら「接続に成功しました。」

接続に失敗したら「接続に失敗しました。(エラーメッセージ)」

のように表示されるはずです。

これでデータベースと接続できたことが確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0