16
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

PDOを使ってデータベースに接続する方法を解説!

はじめに

  • データベースに接続する方法について本やネットの情報から調べて理解したことをまとめました。
  • もし、書いていることに何か間違いがある場合はご指摘いただけると嬉しいです。

接続するデータベースとテーブル

  • 以下のようなデータベースとテーブルがあると仮定して実行します。
  • PDOを利用してデータベースに接続します。

データベース名: test_db1
テーブル名: user

name email
てすと太郎 test-taro@test.test

PDOとは

  • 「PHP Data Objects」の略で、PHPからデータベースへ接続するためのクラスのことです。

データベース(MySQL)に接続する方法

  • データベースに接続するには、どこにある何というデータベースにどのユーザーが接続するのか情報を記述します。
  • PDOクラスをインスタンス化するときに、引数にデータベースの接続に必要な情報を記述することで接続できます。

書き方

インスタンス名 = new PDO("データベースの種類:host=接続先アドレス, dbname=データベース名,charset=文字エンコード" "ユーザー名", "パスワード", オプション)

引数

引数について解説します。

データベースの種類

  • 使用したいデータベースを指定

ホスト名(host)

  • 接続先アドレス

データベース名(dbname)

  • 使用したいデータベース名

文字コード(charset)

  • 文字コード(utf8)

ユーザー名

  • データベースにログインするユーザー名

パスワード

  • データベースにログインするパスワード

オプション

  • オプションは連想配列で指定します。
  • オプションはデータベースに接続する時に様々な機能を使うことができます。

コード例

$user = "ここにユーザー名が入ります";
$password = "ここにパスワードが入ります";

$dbh = new PDO("mysql:host=localhost; dbname=test_db1; charset=utf8", "$user", "$password");
  • 作成したインスタンスを$dbhという変数に代入しています。
  • dbhはデータベースハンドラの略です。

データベースに接続した後にオプションを指定する方法

  • データベースに接続した後にオプションを指定するには PDO::setAttributeメソッドを使用します。

書き方

$dbh->setAttribute(属性 , );
  • PDO::setAttributeメソッドは属性をセットするメソッドです。
  • 第1引数に属性を、第2引数に値を指定します。

コード例


$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)とは

  • PDO::ATTR_ERRMODEという属性でPDO::ERRMODE_EXCEPTIONの値を設定することでエラーが発生したときに、PDOExceptionの例外を投げてくれます。

データを取得する

  • ここまでデータベース接続ができたので、次からデータを取得する方法について紹介します。

コード例


$stmt = $dbh->query('SELECT * FROM user');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

PDO::queryメソッドとは

$stmt = $dbh->query('SELECT * FROM user');
  • PDO::queryメソッドを実行するとクエリを実行します。

PDOStatement::fetchAllメソッドとは

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
  • PDOStatement::fetchAllメソッドは該当する全てのデータを配列として取得します。
  • FETCH_ASSOCでカラム名をキーとする連想配列で返します。

データベースの接続を閉じる方法

  • データベースの接続を閉じるには$dbh = null;を使います。

データベースに接続するコード例

コード例
<?php

$user = "ここにユーザー名が入ります";
$password = "ここにパスワードが入ります";

$dbh = new PDO("mysql:host=localhost; dbname=test_db1; charset=utf8", "$user", "$password");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $dbh->query('SELECT * FROM user');
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    var_dump($result);

    $dbh = null;

実行結果
array(1) { [0]=> array(2) { ["name"]=> string(15) "てすと太郎" ["email"]=> string(19) "test-taro@test.test" } }
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
16
Help us understand the problem. What are the problem?