はじめに
- データベースに接続する方法について本やネットの情報から調べて理解したことをまとめました。
- もし、書いていることに何か間違いがある場合はご指摘いただけると嬉しいです。
接続するデータベースとテーブル
- 以下のようなデータベースとテーブルがあると仮定して実行します。
- PDOを利用してデータベースに接続します。
データベース名: test_db1
テーブル名: user
name | |
---|---|
てすと太郎 | 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" } }