LoginSignup
0
0

More than 1 year has passed since last update.

【Php】PDOでdatabaseに接続する

Last updated at Posted at 2021-06-08

初めに

PDOについて学習した内容のoutput用記事です。

※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。

PDOとは

Php Database Objectsの略でphpを使ってdatabaseに接続するためのクラス。

PDOクラスからインスタンスを生成する

PDOクラスにはあらかじめコンストラクタが定義されており、インスタンスを生成すると同時にデータベースへ接続する関数が実行されます。引数としてDSN(Database source name)とユーザーネーム、パスワード、その他のオプションを指定します。

//DSN,ユーザーネーム,パスワードをそれぞれDB_HOST,DB_USER,DB_PASSWORDに格納
const DB_HOST = 'mysql:dbname=hogehoge;host=127.0.0.1;charset=utf8';
const DB_USER = 'fugafuga';
const DB_PASSWORD = '12345678'; 

それからPDOクラスのインスタンスを作り変数$pdoに格納します。

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

これで簡単にデータベースに接続できます。前提としてmysqlにdatabaseとアカウントを作成しておく必要があります。

DSNとは

DSN(Database source name)はデータベースのソースネームで接続するデータベースを識別するための情報。データベースの名前や種類、ホスト、文字コードなどが入る

よく使うPDOのoption

PDOのインスタンスを生成する時に、よく使われるオプションは以下の3つです。

① PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
→ データベースと接続して帰ってくる値を連想配列という形で受け取る
② PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
→ 例外を表示する
③ PDO::ATTR_EMULATE_PREPARES => false
→ SQLインジェクション対策
(フォームに不正な入力をし、データベースを改ざんすることを防ぐ)

   $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, 
    [                                                   //追記
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
    ]);

データベース接続に失敗した時の処理

try catch文を使ってデータベース接続に失敗した時のエラーメッセージを表示するようにします。catchの引数にPDOExceptionのインスタンス?$e(変数名はなんでも構いません)を渡すことによってエラーの内容を表示することができます。

 try{
    $pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD, [ 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
    ]);
    echo 'connection successful';
  }catch(PDOException $e){
    echo $e -> getMessage() . "\n";
    exit();
  }

PDOExceptionクラスが持つgetMessage()を使えば、PDOの接続失敗時のエラーメッセージを表示することができます。また、exit();によって処理を終わらせます。
スクリーンショット 2021-06-08 20.46.09.png

参考サイト

https://www.php.net/manual/ja/class.pdo.php
https://www.php.net/manual/ja/pdo.construct.php
https://www.php.net/manual/ja/exception.getmessage.php
https://www.php.net/manual/ja/class.pdoexception.php
https://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php
https://www.php.net/manual/ja/language.oop5.decon.php
https://techacademy.jp/magazine/19296

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