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ブランチにここまでの変更点を反映することができました。
次はメモを追加する部分を実装していきましょう。
コメントを残す