PDOクラスコンストラクタとDSNの記述
PDO(PHP Data Object)とはデータベース接続クラスのことです。
PHPには、あらかじめMySQLやPostgreSQLやSQLiteなど、さまざまなデータベースに接続するための操作があります。
そして、それぞれのデータベースに対応するために、接続操作を分岐させる必要があります。
ですがPDOを使えば接続するデータベースの種類に関係なく同じ操作でデータに接続することが可能になります。
データベースに接続
データベースに接続するには、以下のように記述します。
$dsn = 'mysql:dbname=データベース名;host=ホスト名';
$username = 'ユーザ名';
$password = 'パスワード';
//データベースに接続
$db = new PDO($dsn, $username, $password);
$dsn
データベースの接続情報に付けられる識別名DSNを入れます。
「Data Source Name(データ・ソース・ネーム)」の略がDSNです。
データベース名とホスト名を入れましょう。
$username
ユーザ名を入れます。
$password
パスワードを入れます。
例えば
| 項目 | 値 |
|---|---|
| データベース名 | testdb |
| ホスト名 | localhost |
| ユーザ名 | dbuser |
| パスワード | dbpass |
だったときは以下のようになります。
$dsn = 'mysql:dbname=testdb;host=localhost';
$username = 'dbuser';
$password = 'dbpass';
//データベースに接続
$db = new PDO($dsn, $username, $password);
こちらは少し形を変えて、見た目を見やすくしたものです。
<?php
$host = 'localhost';
$dbname = 'testdb';
$username = 'dbuser';
$password = 'dbpass';
//データベースに接続
$db = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4', $username, $password);
データベース接続のためのコードはよく使いまわしますので、config.phpファイルを作成してインクルードできるようにしましょう。
$host = 'localhost';
$dbname = 'testdb';
$username = 'dbuser';
$password = 'dbpass';
こちらをconfig.phpファイルに保存し、require_once()でファイルを読み込みましょう。
require_once('config.php');
//データベースに接続
$db = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4', $username, $password);
基本的な書き方
require_once('config.php');
try{
//データベースに接続
$db = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4', $username, $password);
}catch(PDOException $e) {
die('エラーメッセージ:'.$e->getMessage());
}
?>
データベースへの接続を閉じる
require_once('config.php');
try{
//データベースに接続
$db = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4', $username, $password);
}catch(PDOException $e) {
die('エラーメッセージ:'.$e->getMessage());
}finally{
//データベース接続切断
$db = null;
}
ここで使われている「try-catch-inally」は「例外処理」という書き方で、必ずエラーを出したいときに使います。
発生するかもしれないエラーを想定してプログラム全体が停止しないように対処するための処理です。
接続失敗時のエラー表示
データベースへの接続エラーを表示するには、以下のように記述します。
require_once('config.php');
try{
//データベースに接続
$db = new PDO('mysql:host='.$host.';dbname='.$dbname.';charset=utf8mb4', $username, $password);
if($db == null){
print('接続に失敗しました。');
}else{
print('接続に成功しました。');
}
}catch(PDOException $e){
die('エラーメッセージ:'.$e->getMessage());
}finally{
//データベース接続切断
$db = null;
}
コピーできました!