【php基礎】PDOでDBにアクセスする時の構文とは?例外処理あり

スクリプト

phpでDBを使用できると、サービスの幅がとてつもなく広がります。今回はphpでDBと連携をとる時の基礎をやっていきます。

今回行うDBへ連携する時の項目は下記です。

  1. DB接続構文でDBに接続する
  2. try catch構文で例外対応する
  3. DB接続のオプションを理解する
目次

DB接続構文でデータベースに接続する

アクセス

phpでDBを使用したい場合の構文は下記です。DBにアクセスする文法です。

 $変数1 = "mysql:host=DBのURL;dbname="DB名";charset=文字コード;
 $変数2 = new PDO($変数1, ログインユーザー名, ログインパスワード);

1つずつ説明します。まずは下記を用意します。

  1. DBのURL
  2. 作成したデータベース名
  3. 文字コード
  4. DBのユーザー名
  5. DBのパスワード

①DBのURLを用意します。自分自身にしている場合は「localhost」でも大丈夫です。

「localhost」 とは自分自身を表します。

②作成したデータベース名を記入します。DBを作成していない場合は先に作成してください。

③文字コードを決めておきます。

①②③を使用して接続するDBを指定して、変数に入れます。これが一行目

 $変数1 = "mysql:host=DBのURL;dbname="DB名";charset=文字コード;

④DBのユーザー名を入力します。DB専用のユーザーを作成した場合は記入してください。

作成してなければ、デフォルトであるユーザーでも良いです。

⑤ DBのパスワードを入力します。 DB専用のユーザーを作成した 場合はそのパスワードを記入してください。

④⑤と先程作成した変数を使用して、PDOのインスタンスを作成します。これが2行目

$変数2 = new PDO($変数1, ログインユーザー名, ログインパスワード);

自分の環境に合わせてコードを書いてみる

①ここでは自分自身のパソコンをDBサーバーにしているので、DBのURLは「localhost」。

②DB名は「mydatabase」というDB作成しました。変数「$DB_DATABASE」を作成してここに入れておきます。

③文字コードをここでは「utf8」にしておきます。 変数 「$DB_OPTION 」を作成してここに入れておきます。

④ユーザーはデフォルトの「root」にします。 変数「$DB_USERNAME」を作成してここに入れておきます。

⑤rootのデフォルトパスワードはないので、空白にします。 変数「$DB_PASSWORD」を作成してここに入れておきます。

接続するDBを指定して 変数「$PDO_DSN」に入れました。

変数「$PDO_DSN」 を使用して新しいPDOインスタンスを作成しました。それを変数「$db」に入れました。

わたくしの環境ではコードは下記になりました。

 $DB_DATABASE = 'mydatabase';
 $DB_USERNAME = 'root';
 $DB_PASSWORD = '';
 $DB_OPTION = 'charset=utf8';
 $PDO_DSN = "mysql:host=localhost;dbname=" . $DB_DATABASE . ";" . $DB_OPTION; #DSN データソースネームmysqlの場合
 $db = new PDO($PDO_DSN, $DB_USERNAME, $DB_PASSWORD);

次はDBに接続失敗した時の為に、例外処理を追加します。

try catch構文

phpで通常try catchの構文基礎は下記のコードです。

try{
 ここに通常の処理を書く
 throw new Exception();
 } catch(Exception $e){
  ここに例外の処理を書く
 };

tryの後に通常の処理を書く。例外がある場合は、ifなどで条件分岐等を行います。

その後に「throw new Exception();」で例外を投げます。catchに処理が飛びます。「catch(Exception $e)」の後に例外処理を入力します。

通常のtry-catch構文を詳しく知りたい場合は、「【php基礎】try~catchで例外処理をする」の記事をご覧ください。

今回PDOでDBに接続する場合ですので、少し例外処理コードが変わっています。

DB接続時、try catch構文で例外対応する

選択する
Business person stand on road fork with hard and easy directions. Choice way isometric

DBにPDOで接続する場合の、例外処理コードは下記です。

try{
 ここにDB接続の処理を書く
  [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
 } catch(PDOException $e){
  ここに例外の処理を書く
 };

tryの後にDBに接続するコードを記入する。オプションがありますので、そこで例外処理するオプションを付けます。

オプションは[]で囲みます。例外のオプションは[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]になります。

DB接続失敗すると「catch(PDOException $e)」に飛びます。

「Exception」ではなく「 PDOException 」になっている事に気を付けて下さい。

これでDB接続時の例外処理が完成しました。

先程のDBの接続する処理に、今回の例外処理を追加するとコードは下記になりました。

try{
 $DB_DATABASE = 'mydatabase';
 $DB_USERNAME = 'root';
 $DB_PASSWORD = '';
 $DB_OPTION = 'charset=utf8';
 $PDO_DSN = "mysql:host=localhost;dbname=" . $DB_DATABASE . ";" . $DB_OPTION;
 $db = new PDO($PDO_DSN, $DB_USERNAME, $DB_PASSWORD,
 [   PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
 ]);
 } catch(PDOException $e){
 例外処理;
}

DB接続のオプションを理解する

今回「 PDO::ERRMODE_EXCEPTION 」オプションで例外処理をしましたが、エラー系は下記3つです。

  • PDO::ERRMODE_EXCEPTION
  • PDO::ERRMODE_SILENT
  • PDO::ERRMODE_WARNING

現在ではPDO::ERRMODE_EXCEPTIONだけ覚えておけばOKです。

他のオプションとしては沢山ありますが、特に使用しないので割愛します。

興味があればググってみて下さい。

DBにアクセスする時の構文を理解するのまとめ

DBのURL、DB名、文字コード、DBのユーザー、DBのパスワードを用意して、コードを書きましょう。

PDOのインスタンスを作成して変数に入れましょう。

try-catch構文で例外処理を入れましょう。(通常の例外処理と少し違うので注意)

最終的に私の環境では下記のコードになりました。

<?php
try{
 $DB_DATABASE = 'mydatabase';
 $DB_USERNAME = 'root';
 $DB_PASSWORD = '';
 $DB_OPTION = 'charset=utf8';
 $PDO_DSN = "mysql:host=localhost;dbname=" . $DB_DATABASE . ";" . $DB_OPTION;
 $db = new PDO($PDO_DSN, $DB_USERNAME, $DB_PASSWORD,
 [   PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
 ]);
 echo 'DB接続成功';
 } catch(PDOException $e){
 echo 'DB接続失敗';
}
?>

今回は「通常の処理」にDB接続のコードを入力、わかりやすいように「echo ‘DB接続成功’;」を追記しています。

例外処理には「echo ‘DB接続失敗’;」を追記しています。

今回はphpでDBにアクセスする場合の、基本コードを書いてみました。

PHPをもっと詳しく学ぶには、プログラミングスクールもお勧めです。

番外編:実際にアクセスし、接続成功と失敗を表示して見る

試しにURLにアクセスしてみます。インターネットエクスプローラーで「http://127.0.0.1/index.php」を入力します。

DB接続成功と想定通りのメッセージが表示されました。

ではユーザーを「root」を存在しない「roots」に変更して、再度アクセスしてみます。

DB接続失敗と想定通りのメッセージが表示されました。 成功しているようです。

スクリプト

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次