フルスタックエンジニアのノウハウ
2020.03.19    2020.11.01

PHPからデータベースを操作する手順

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


今回は「PHPからデータベースを操作する手順」について、ご説明します。


・PHPでデータベースにアクセスする手順が知りたい。
・fetch()とfetchAll()って何が違うの?


このような疑問をお持ちの方はぜひご覧ください!



PHPからデータベースを操作する手順(テンプレ)


PHPからデータベースを操作する手順は以下のようになります。

この手順はテンプレなので、覚えておきましょう!


1.データベースに接続する。
2.実行したいSQL文をセットする。
3.SQLに対してパラメーターをセットする。【任意】
4.実際にSQLを実行する。
5.結果を取得する。【任意】
6.データーベースから切断する。


ちなみに、PHPのソースコードの中でデータベース処理を複数行う場合、1(接続)6(切断)は、PHPの最初と最後でそれぞれ一度だけ行えばOKです。


ソースコードはこんな感じです。


// 1.データベースに接続する。
$pdo = new PDO('mysql:dbname=データベース名;host=ホスト名;' , 'ユーザー名', 'パスワード');
$pdo->query('SET NAMES utf8;');

// 2.実行したいSQL文をセットする。
$stmt = $pdo->prepare('SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1');

// 3.SQLに対してパラメーターをセットする。【任意】
$stmt->bindValue(':mail_address', $mail_address, PDO::PARAM_STR);

// 4.実際にSQLを実行する。
$stmt->execute();

// 5.結果を取得する。【任意】
$user = $stmt->fetch();

// 6.データーベースから切断する。
unset($pdo);



【手順1】データベースに接続する。


$pdo = new PDO('mysql:dbname=データベース名;host=ホスト名;' , 'ユーザー名', 'パスワード');


まずは、この1行でデータベースに対して接続を行います。


データベースへの処理には、「PDO」というPHPであらかじめ用意されたデータベース処理用のクラス(機能)を使います。


PDOクラスに対して以下の4つの情報を指定することで、データベースに接続されます。


・データベースが置かれているホスト名(サーバー名)
・接続するデータベース名
・データベースに接続する際のユーザー名
・データベースに接続する際のパスワード


データベースに接続したら、文字化けしないようにプログラムで使用する「文字コード」を指定しておきます。(この例ではutf8を指定しています)


$pdo->query('SET NAMES utf8;');



【手順2】実行したいSQL文をセットする。


$stmt = $pdo->prepare('SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1');


次に、実際にデータベースに対して行いたい処理を「SQL言語」を使って記述します。


プログラムからデータベースに対して行う命令は、基本以下の4種類となります。


SELECT文:データを「検索して取り出す」
INSERT文:データを「新規に登録」する
UPDATE文:データを「変更」する
DELETE文:データを「削除」する


なお、この例のように、SQL文の中でパラメーターを指定する場合は、SQLに直接値や変数を書かずにプレースホルダ」というものを使います。


 これは、SQLインジェクション対策というセキュリティ対策のためです。


このように、SQL文の中にPHP変数($mail_address)を直接書かずに、


悪い例)

SELECT * FROM user WHERE mail_address = $mail_address LIMIT 1


プレースホルダ(:で始まる代替文字列)を指定しておきます。


良い例)

SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1


プレースホルダには、次の「手順3」で実際のデータがセットされます。



【手順3】命令に対してパラメーターをセットする【任意】


$stmt->bindValue(':mail_address', $mail_address, PDO::PARAM_STR);


SQL文でプレースホルダ定した場合は、この手順で実際の値をセットします。


SQL文にパラメータが無い場合は、この手順は不要です。

逆に、複数のプレースホルダがある場合は上記を複数行書きます。


プレースホルダについては、以下の記事で詳しく説明しています。

関連記事

プレースホルダとは?SQLインジェクション攻撃を回避せよ!



【手順4】実際に命令を実行する


$stmt->execute();


execute()を呼び出すと、データベースに対して実際に命令が実行されます。


INSERT、UPDATE、DELETE文についてはここで処理は終了です。



【手順5】結果を取得する【任意】


$user = $stmt->fetch();


SELECT文の場合は、データベースから取得したデータを取り出します。

この例では、取得した結果データは$userという変数に入ります。


データベースから取得したデータは、$user['カラム名']という指定で取り出すことが出来ます。


例)idカラムのデータは、$user['id']と書けば取得可能です。



【手順6】データーベースから切断する(コネクション破棄)


unset($pdo);


最後にunsetすることで、データベースへの接続が切断されます。



fetch()とfetchAll()って何が違う?


fetch()というのは、SQLの実行結果が「1件」の場合の取り出し方です。


上の例では、SELECT文の末尾に「LIMIT 1」を指定して結果データを1件のみ取得しているため、fetch()を使っています。


1件ではなく、結果データが複数件ある場合には、fetch()の代わりにfetchAll()を使います。


結果データが「1件」の場合 ⇒ fetch()
結果データが「複数件」の場合 ⇒ fetchAll()


このように覚えておきましょう!



まとめ


PHPからデータベースを操作する際の手順は以下のようになります。


1.データベースに接続する。
2.実行したいSQL文をセットする。
3.SQLに対してパラメーターをセットする。【任意】
4.実際にSQLを実行する。
5.結果を取得する。【任意】
6.データーベースから切断する。


実際の開発では、関数やフレームワークによって処理が共通化されていたりするため、上記の手順全てを書かなくても良いことも多いですが、この手順を覚えておけば、ソースコードが白紙の状態からでもデータベース処理を書くことが出来ます。


基本の手順として、ぜひ覚えておきましょう!


おすすめ記事