PHPからMySQLに接続する方法

今回はPHPからMySQLに接続する方法を初心者にも分かり易く説明しようと思います。

PHPからデータベースに接続する方法はいくつかありますが今回は「PDO」を使って説明していきたいと思います。

スクリーンショット2023-12-1020.06.17.png

今回はテストというデータベースを用意したので接続していこうと思います。

PDOとは?

PDO は PHP Data Objects の略で、データベース接続クラスのことです。

データベース操作はシステムごとに命令が異なりますが、PDOなら同じ関数で操作することが可能です。

PDOの書き方

$dbh = new PDO ($dsn, $user, $pass, opt);
PDOを使ってデータベースに接続するときはこのようなコードになります。

まず**$dbh**ですがこれはデータベース接続の時によく使われる変数名です。

データベースハンドルの略でこれからデータベースを操作するよーということです。

その次のnew PDOですがPDOのクラスを使うという意味で呼び出しています。

$dsnにはデータベースの情報が入ります。

今回の場合だと
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
このような形になります。

$userと**$pass**ですがここは初期設定では'root'となっています。

それではデータベースに接続していきたいと思います。
`<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root'; // ここは設定したユーザーを入れてください
$pass = 'root'; // ここは設定したパスワードを入れてください

$dbh = new PDO($dsn,$user,$pass);

var_dump($dbh);
?>`
これでphpのファイルを開いてみます。
スクリーンショット2023-12-1020.45.38.png

このようにPDOのオブジェクトが返されているので接続ができたということになります。

ただこれだけだと接続に成功したのか失敗したのか分かりづらいですよね。

その為に接続に失敗した時の処理処理を作る必要があります。

try~catchとは?

接続に失敗した時try~catchというものを使います。

これはデータベースのエラーをチェックできる構文で、例外処理と呼ばれます。

書き方

try { //接続に成功した時の処理を書く。 } catch() { //エラーが発生した時の処理を書く。 }

このような形になります。

try~catchを書く前にPDOにオプションを設定してSQLのエラーを表示する設定を追加します。
$dbh = new PDO($dsn,$user,$pass,[ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//エラーを表示するオプション ]);

そしてtry~catchを書くとこのようになります。

`<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root'; // ここは設定したユーザーを入れてください
$pass = 'root'; // ここは設定したパスワードを入れてください

try {
$dbh = new PDO($dsn,$user,$pass,[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
echo '接続成功';
$dbh = null;
} catch(PDOException $e) {
echo '接続失敗'. $e->getMessage();
exit();
};

?>`

catch()の中ですが$eの中にエラーの内容が入ります。

それをgetMessage()で出力するという形になります。

エラーの場合この処理を終わらせて欲しいのでexit();と入れておきます。

成功した場合は「接続成功」と表示され$dbh = null;と書くことで接続が終了したという意味になります。

これでphpファイルを開いてみましょう。

スクリーンショット2023-12-1021.29.38.png

接続に成功していますね。

今度はわざとユーザー名を間違えてエラーの際の例外処理を見てみたいと思います。

スクリーンショット2023-12-1021.32.33.png

接続失敗というテキストとエラー内容が表示されています。

まとめ

データベースには接続できましたでしょうか?

その内データベースから要素を取り出す方法の記事もアップしたいと思います。

お疲れ様でした。