はじめに
UdemyでPDOでデータベースへ接続する方法を学んだのですが、いまいち自分の中でまとまってないのでこちらでまとめてみようと思います!
前提
phpMyAdminにてすでに、DBと特権ユーザが用紙されていることを大前提にしています。
今回は、udemy_phpというDBとphp_userというユーザを用意しています
実装
まずは全体を見てみます。
<?php
const DB_HOST = 'mysql:dbname=udemy_php;host=127.0.0.1;charset=utf8';
const DB_USER = 'php_user';
const DB_PASSWORD = 'password123';
//例外 exception
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, //SQLインジェクション対策
]);
echo '接続成功';
} catch(PDOException $e){
echo '接続失敗' . $e->getMessage() . "\n";
exit();
}
まず最初は、変数にそれぞれ情報を入れています。
このへんはもおうお決まりみたいなものなので、こういうものかああでいいと思います。
const DB_HOST = 'mysql:dbname=udemy_php;host=127.0.0.1;charset=utf8';
//mysql:dbname=[データベース名]:host=[データベースサーバーのホスト名]で記述します
const DB_USER = 'php_user';
const DB_PASSWORD = 'password123';
つぎにPDOを使用して、DBへアクセスしていきます。
そもそもPDOってなんだよって思いますよね、、、、PDOとは、PHP Data Objectsの略称で、一言で言い表すならば、PHPからデータベースのアクセスを抽象的にしてくれるものです。
抽象的とはどういうことでしょうか。データベースにMySQLやPostgreSQLなど複数種類があります。PHPではmysqliクラスやPostgreSQL関数を使用したりとデータベースごとに関数を使い分けなければなりません。どのデータベースでも、同じ書き方で使用できるようにしたのがPDOです。各データベースのPDOドライバにアクセスしてデータベースを操作します。PHPではPDOドライバを直接呼ぶのではなく、データベース共通のインスタンスを作ります。
まあ、要するにPDOによって色々あるDBを一元的に使えるようにした!って感じなのかな?
そして、DBアクセスには次の一文でできるみたい!
$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD);
めっちゃ簡単!!引数にDBの情報とユーザ名、パスワードをもってくるだけ。
ただし、このままでは色々危険があるみたいなんでオプションを4つ目の引数つけてやります!
$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, //SQLインジェクション対策
]);
このへんもほとんどお決まりらしいので、こういったものがあるという感じでいいんですが、、、、、
私は気になります笑
オプション | 内容 |
---|---|
PDO::FETCH_ASSOC | カラム名をキーとする連想配列で取得する.これが一番ポピュラーな設定. |
PDO::ERRMODE_EXCEPTION | 設定すると例外をスローしてくれる.これを選択しておくのが一番無難.例外 |
PDO::ATTR_EMULATE_PREPARES => false | SQLインジェクション対策 |
(参考)SQLインジェクション
不正な「SQL」の命令を攻撃対象のウェブサイトに「注入する(インジェクションする)」のが、SQLインジェクション
参考URL:https://www.kagoya.jp/howto/network/sql-injection/
だんだん見えてきました!
というかもお分かりですね。あとは例外処理を行うことで接続成功の場合と、接続失敗の場合で分けてあげればOKです!
おわりに
以上、ざっくりPDOでのDB接続についてまとめてみました!
日々少しづつ進歩していく!