1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[PHP]PDOでデータベースと接続する方法

Last updated at Posted at 2021-06-02

はじめに

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インジェクション
スクリーンショット 2021-06-01 18.33.26.png

参考URL:https://www.kagoya.jp/howto/network/sql-injection/

だんだん見えてきました!
というかもお分かりですね。あとは例外処理を行うことで接続成功の場合と、接続失敗の場合で分けてあげればOKです!

おわりに

以上、ざっくりPDOでのDB接続についてまとめてみました!
日々少しづつ進歩していく!

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?