phpsql_データベースとPHPを接続する

04データベースとPHPを接続する

PHPからデータベースへの接続を行います。

最初に作成した「dbConnection.php」に下記のコードを追加してください。

<?php
try {
    /*DBへ接続*/
    $host = 'localhost';
    $username = 'user';
    $password = 'pass';
    $dbName = 'memo_php';

    $dbh = new PDO("mysql:host=localhost; dbname=$dbName; charset=utf8", $username, $password);
    echo '接続成功';
} catch (PDOException $e) {

    echo $e->getMessage();
}

次にindex.phpの先頭に以下のコードを追加してください。

<?php
    include './dbConnection.php';
?>

ページを読み込んでみると、以下の画像のように「接続成功」と表示されます。

これでPHPからデータベースへの接続ができました。では、コードの解説をしていきます。

まずはindex.phpのinclude './dbConnection.php';についてです。

ここではdbConnection.phpを読み込み、index.php上で使えるようにしています。

index.phpに直接dbConnection.phpの内容を記述しているのと同じ状態になります。

なぜファイルを分けるのでしょうか? それは、機能ごとにファイルを分けた方が後から改修しやすく、保守性が高まるためです。

ファイルを分けずに全て同じファイルに記述していくとコード数が増え、読みにくく、追加しにくいコードになってしまいます。

続いてdbConnection.phpの内容についてです。

まずは、try catch文について説明します。

try { /*DBへ接続*/
    $host = 'localhost';
    $username = 'user';
    $password = 'pass';
    $dbName = 'memo_php';

    $dbh = new PDO("mysql:host=localhost; dbname=$dbName; charset=utf8", $username, $password);
    echo '接続成功';
} catch (PDOException $e) {
    echo $e->getMessage();
}

コードではこの部分です。

try catch文は、例外が発生する可能性のある処理をtryブロックの中に記述し、例外が発生した時に実行する特別な処理をcatchブロックの中に記述します。

今回例外が発生した場合は、echo $e->getMessage();が実行されるということがわかります。

実際の処理は、try{}の中に書くので、DB接続情報はこのようにtry{}の中に書かれています。

テーブルを作成する

今回作成するテーブルは以下のカラムを持たせます。

  • id 今回の主キー
  • body メモの内容
  • date メモが登録されたときの日付
  • invalid 論理削除判定カラム(0:未削除 1:削除済)

では実際にテーブルを作成していきます。

「Lesson12_PHP_SQL」フォルダの中に新しく「sql」フォルダを作成してください。

作成できたら「sql」フォルダの中に「memo.sql」ファイルを新規作成し、以下のコードをコピペしてください。

memo.sql

DROP TABLE IF EXISTS `memo_php`.`memo`;
CREATE TABLE `memo_php`.`memo` (
    `id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `body` VARCHAR(100) NOT NULL,
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `invalid` INT NOT NULL DEFAULT 0
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

作成したファイルの構成は以下です。

Lesson12_PHP_SQL
  ├──memo_php
  └── sql
      └── memo.sql

それでは先ほど作成したsqlファイルを実行してテーブルを作成していきましょう。

まずは以下コマンドを実行し、MySQLにログインしましょう。

※すでにログインしている場合は不要です。

MySQLにログイン

sudo mysql -u root

ログインできたら以下のコマンドを実行してください。

source Lesson12_PHP_SQL/sql/memo.sql

「Query OK, 0 rows affected」と表示されればOKです。

エラーが出る場合はファイル名やパスが間違っている可能性があるので、ファイル名やパスを見直してみましょう。

ではテーブルが実際に作成されたかどうかを確認しましょう。

下記コマンドを順に実行していきます。

データベース一覧を表示

show databases;

データベースを選択

use memo_php;

テーブル一覧を表示

show tables;

無事に「memo」テーブルが表示されています。

テーブルの構成を確認してみましょう。

describe memo;

上記画像のようになっていればテーブル作成は完了です。

データベースの中身を画面に表示する

ここではデータベースに登録されているメモを実際に画面に表示させてみます。

dbConnection.phpのecho '接続成功';コメントアウトしておいてください

では新たにindex.phpと同じ階層に「select.php」を新規作成しましょう。

memo_php
├── css
│   └── style.css
├── index.php
├── select.php
└── dbConnection.php

作成したら以下のコードをコピーしましょう。

select.php

<?php
    $sql = "SELECT * FROM memo";
    $memo_list = $dbh->query($sql);

index.php

<?php
    include './dbConnection.php';
    // この部分を追加
    include './select.php';

// memo_showクラス部分を上書き
<div class="memo_show">
     <?php foreach($memo_list as $memo): ?>
     <div class="memo_item">
          <div class="memo_title">
             <time><?php echo $memo['date'] ?></time>
             <p><?php echo $memo['body'] ?></p>
          </div>
          <div class="btn_area">
             <div class="edit_form">
                <form action="">
                     <input type="submit" value="編集">
                </form>
             </div>
             <div class="del_area">
                 <form action="">
                     <input type="submit" value="削除">
                 </form>
             </div>
         </div>
     </div>
     <?php endforeach; ?>
</div>

ここまでコピーできたら画面を読み込んでみましょう。

画面上にデータベースに登録されたデータが表示されていますね。

これで表示されるまでの処理は完了です。

コードについて解説していきます。

$sql = "SELECT * FROM memo";
$memo_list = $dbh->query($sql);

まずはこの部分です。

$sqlという変数にSQL文を代入しています。

SQL文はシンプルにmemoテーブルから全てのデータを取得するという内容になります。

次に$dbh->query($sql)の部分です。

ここでは先ほどのSQL文をPHPから実行しています。これまでターミナルで行っていたことをPHP上で行っています。

これで実行されたSQLの結果が$memo_listの中に格納されます。

続いてこの部分です。

<div class="memo_show">
     <?php foreach($memo_list as $memo): ?>
     <div class="memo_item">
          <div class="memo_title">
             <time><?php echo $memo['date'] ?></time>
             <p><?php echo $memo['body'] ?></p>
          </div>
          <div class="btn_area">
             <div class="edit_form">
                <form action="">
                     <input type="submit" value="編集">
                </form>
             </div>
             <div class="del_area">
                 <form action="">
                     <input type="submit" value="削除">
                 </form>
             </div>
         </div>
     </div>
     <?php endforeach; ?>
</div>

まずは<?php foreach($memo_list as $memo): ?>の部分です。

ここでは、

$sql = "SELECT * FROM memo";
$memo_list = $dbh->query($sql);

で取得したデータベースから取得したメモ内容を1つ1つループさせています。

メモの内容の1つが$memoに格納されています。

具体的には、$memoには、

$menu = [
	'id' => 1,
  'body' => 'メモ',
	'date' => '2023-01-04 19:26:20',
  'invalid' => 0
];

というデータが入っています。

これはデータベースのデータが配列として$memoに格納されています。

最後に、

<time><?php echo $memo['date'] ?></time>
<p><?php echo $memo['body'] ?></p>

この部分です。

配列から日時とメモ内容を取得し、echoで表示させています。

これで表示の部分まではできました!

Git

バージョン管理もおこないます。

バージョン管理を行うことで、どのような変更が行われたか把握しやすくするためです。

以下のコマンドを順に実行して下さい。

memo_phpディレクトリに移動

cd ~/Lesson12_PHP_SQL/memo_php

初期化

git init

ここまでの変更点をコミット

git add .

git commit -m "表示"

// デフォルトのmasterブランチをmainブランチに名前を変更
git branch -M main

以上を実行することで、ローカルのmasterブランチにここまでの変更点を反映することができました。

次はメモを追加する部分を実装していきましょう。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です