【第4回】プログラミング未経験だけどWebシステムを作ってやる!【TODOリストを作る】

2019年1月13日

前回でPHPの簡単な使い方を覚えました。
今回は孤軍奮闘をしたPHPとデータベースの連携をします。

前回の記事を読んでない人は読んでね

あ、ちなみにだけど、全何回になるかはわからんよ

PHPとデータベース(MySQL)が連携するメリット

メリットですが、例えば会員制サイトを作りたいとしましょう
どういった形態にするかは自由ですが、
ユーザーIDとパスワードで会員を管理するとします。

そうすると、PHPだけで出来なくもないですが、色々と不都合が出てきます。
いや、ほんと色々となんです。はい、色々です。
そこはなんとなく察して欲しいというか調べて自分で考えて欲しい

答えがあって調べるより、なぜそうなのか考えながら調べると
より一層理解が深まるので

多分ね!

実際にデータベースへ接続してみよう

てなわけで、実際にPHPとMySQLを繋げましょう
PHPとデータベースを接続するのに、PDOというクラスを利用します。
クラスという概念、正直良くわかっていませんが使っていればなんとなく理解が出来ます

さすがに投げっぱなし過ぎるだと思われた方のために、よく分かるサイトを

使い方はわかるけど、説明はできないというヤバイ状況ではありますが、
気にせず進めましょう!
(だってコンストラクタとかインスタンスとか継承とか何言ってんだよって感じだし)

何がなんやらの人のために簡単にですが、説明しますね

まずはここの4行

defineというのは、定数を定義する関数ってやつです
$aみたいな変数と違って、一度定義されるとプログラムの実行中は変更できないので
データベースに接続する情報は、変更されない方が一般的には都合が良いので
定数で定義してあげます。

定数について詳しく知りたい方は下記サイトへ
PHPのdefineで定数を定義する方法【初心者向け】

上から説明していきます。
あ、ちなみに定数の名前は一部を除き自由ですので、この限りではないです
new PDOの中身がわかりやすくなるので、このような命名にしました

DB_HOST

接続するデータベースのアドレスを入れる定数にしました。
ローカル環境なら「localhost」や「127.0.0.1」とかです。
また、このブログのエックスサーバーでは「mysql○○○○.xserver.jp」になります

DB_NAME

接続するデータベースの名前を入れる定数にしました。
データベース名は自分で決めれます
エックスサーバーだと、サーバーID_好きな名前だった記憶があります

DB_USER

自分のデータベースを誰でも勝手に操作されては困りますよね?
そのために、このデータベースを操作できるのはこのユーザーだけって設定出来ます。
その設定したユーザーのユーザーIDを入れる定数です

DB_PASSWORD

データベースを操作できるユーザーIDが漏れたら誰でも操作できると困りますよね
そのユーザーに対応するパスワードを入れる定数です

さて、次はこの部分

ここでは実際にデータベースへ接続する処理が記述されています。

try catch

これは、tryの中の実行してエラーが出たらcatchの中身が動くというものです
例外処理とも言われてるかな?
今回だと、データベースへ接続を試みて、失敗したら処理を終了して「データベースの接続に失敗しました」っていうのを$eに突っ込むよ!って意味になってます

説明難しいから自分で試してみてね

$dbh = new PDO

来ましたPDOクラスでございます。
PDOクラスはPHPで既に定義されているので、プログラムのどこでも呼び出せます
呼び出す時には、「new PDO」と記述します
そして()の中に色々と条件を入れていきます

()の中を見れば分かる通り、定義した定数を入れてます。
そう、ここで実際にデータベースへ接続するための情報を入れる必要があります
定数に入れたのは、ローカル環境と本番環境では接続するデータベースが変わることが一般的な為、
予め定数に入れておき、必要に応じて変更しやすくするためです

$dbh->setAttribute

「->」ってのは矢に見えるからアロー演算子という名前です。
ちなみに「=>」っていうダブルアローもあります。
それについて詳しく知りたい方は下記ブログの記事で

【PHP】アロー演算子 -> と ダブルアロー =>

ちなみに第三回でダブルアローはしれっと使ってます。

さて本題ですが、Attributeというのは日本語で属性という意味です
なので、setAttributeってのは、属性を設定しますって意味ですね

その後の部分ですが、どのサイトを見てもこの記述だったのでこうしただけですw

実際にデータベースへ接続してテーブル作成する

さて、データベースに接続するだけじゃ意味が無いです。
その中にあるテーブルの値を取得したり、書き込んだり、削除したりが必要ですよね
そういうわけで簡単なTODOアプリを作って、それらの操作をしましょう!

まずはデータベースにテーブルを作りましょう
カラム名はこんな感じでいいかな?

idnamecontentflag
連番を付けるだけTODOのタイトルTODOの内容終わったかどうかのフラグ

idにはAUTOINCREMENTを設定してあげます。
これは自動で連番を付けてくれるって思っておけばいいです。その通りですし

じゃあテーブルを作るphpでも作りますか

これで、create_table.phpを実行すれば、todoテーブルが作成されます。
ちなみに「IF NOT EXISTS」ってのを入れないと、二回目に同じPHPを実行した場合
todoテーブルはもうあるよ!ってエラーが出ます

ちなみに実行結果はこちら
sample-3/create_table.php

その他は自分で調べてくれ!

次回は?

ここまでで、私は疲れてしまった。
実際のテーブル操作や作っていくのは次回以降にするよ

TODOリストが作れるようになれば、もう怖いものなんて無いよ
後は、作りたい機能をどうすれば作れるかを基本に忠実にやっていけばできちゃう