初めに
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();によって処理を終わらせます。
参考サイト
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