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

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

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

こんにちは、徳田 啓です。
Webプログラマー歴20年、【フルスタックエンジニア マスター講座】を運営しています。(生徒数1,800名突破)

今回は「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つの情報を指定することで、データベースに接続されます。

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


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

データベースに接続したら、文字化けしないようにプログラムで使用する「文字コード」を指定しておきます。(この例では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文にパラメータが無い場合は、この手順は不要です。
逆に、複数のプレースホルダがある場合は上記を複数行書きます。

プレースホルダについては、別の記事で詳しく説明しようと思います。


【手順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件」の場合の取り出し方です。

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

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

  • 結果データが1件:fetch()
  • 結果データが複数件:fetchAll()



まとめ


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

以上が、PHPからデータベースを操作する際の手順になります。

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

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

おすすめ記事
無料メルマガ配信中