【PHP】これで分かる関数! – データベース接続・クローズ –

PHP

更新履歴

更新日更新者更新内容
2021/8/4JJI・データベース接続・クローズの段落について接続、クローズのプログラムの
書き方を分かりやすくなるように文章を修正
・サンプルプログラムに画面の画像を追加

はじめに

この記事で紹介するサンプルプログラムは次の記事で書いている共通関数を使用している場合があります。

データベース接続・クローズ

PDOを使用し、データベースに接続し、クローズするプログラムの書き方は次の通りです。

1.次のコードのようにデータベースへの接続はPDOオブジェクトにユーザ、パスワード、データベース接続情報を引数に設定します。

$pdo = new PDO($dbn, $dbusr, $dbpw);

2.接続したデータベースをクローズする場合、次のように生成したPDOオブジェクトにnullを設定します。

$pdo = null;

PDOでエラーが発生した場合はPDOExceptionの例外が発生するため、try~catch文を使用してエラー処理を行います。
例外、 try~catch文はオブジェクト指向の機能のため、別の記事で紹介したいと思います。

データベース接続・クローズについて実際にコードを見た方が早いので、サンプルプログラムを使って説明します。

サンプルプログラム

データベース接続・クローズのサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";
    $filename = basename(__FILE__);

    // 共通HTMLヘッダ出力処理
    common_html_header($filename);

    echo "ファイル名:${filename}<br>\n";
    echo "【PHP】データベース<br>\n";
    echo "データベースの接続とクローズ<br>\n";

    $dbn = "mysql:dbname=sampledb;host=localhost;port=3306";
    $usr = "sampleusr";
    $pw = "sample";

    echo "DB接続が正しい場合<br>\n";
    connect_sample_db($dbn, $usr, $pw);
    echo "<br>\n";

    echo "DB接続が正しくない場合<br>\n";
    connect_sample_db($dbn, "dummy", $pw);
    echo "<br>\n";

    // 共通HTMLフッター出力処理
    common_html_footer();

    // DB接続・クローズ関数
    // データベースに接続し、クローズする
    function connect_sample_db(string $dbn, string $dbusr, string $dbpw) {
        $pdo = null;

        try {
            // データベースに接続
            $pdo = new PDO($dbn, $dbusr, $dbpw);    
            echo "DB接続に成功<br>\n";
        } catch(PDOException $e) {
            // catch句は例外をキャッチし、エラーメッセージの表示
            echo "DB接続に失敗<br>\n";
            echo "Line:" . $e->getLine() . ": ";
            echo "Code:" . $e->getCode() . ": ";
            echo "Message:" . $e->getMessage() . ":<br>\n";
        } finally {
            // finally句でDB接続が成功している場合、DBをクローズ
            if(!is_null($pdo)) {
                // DBのクローズ
                $pdo = null;
            }
        }
    }
?>

実行結果は次の通りです。

・画面

・HTML

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>sample02_09_01.php</title>
</head>
<body>
ファイル名:sample02_09_01.php<br>
【PHP】データベース<br>
データベースの接続とクローズ<br>
DB接続が正しい場合<br>
DB接続に成功<br>
<br>
DB接続が正しくない場合<br>
DB接続に失敗<br>
Line:37: Code:1045: Message:SQLSTATE[HY000] [1045] Access denied for user 'dummy'@'localhost' (using password: YES):<br>
<br>
</body>

コメント