CODE-U - はじめてのPHPプログラミング - 超速習 - PHPプログラミング(Web - DB編)
PHPプログラムからデータを保存する際にファイルではなくデータベースを利用できます。データベース(リレーショナルデータベース)にはMySQLやPostgreSQLなどさまざまなソフトウェアが存在します。ここではシンプルで扱いやすいSQLiteというデータベースを使用します。
SQL
データベースにデータを保存したり、データを取り出したりするにはSQLというプログラミング言語を使います。SQLはデータを定義するもの(DDL: Data Definition Language)とデータを操作するもの(DML: Data Manipulation Language)の2種類に大きく分けることができます。
- DDL
- create table文
- テーブルを定義する
- alter table文
- テーブル定義を変更する
- drop table文
- テーブル定義を削除する
- create table文
- DML
- select文
- テーブルのレコードを検索する
- insert文
- テーブルにレコードを作成する
- update文
- テーブルのレコードを更新する
- delete文
- テーブルのレコードを削除する
- select文
bbs.sql
drop table if exists messages;
create table messages(
id integer primary key autoincrement,
contents varchar(255)
);
insert into messages (contents) values ('Hello');
insert into messages (contents) values ('Chao');
insert into messages (contents) values ('Bonjour');
上記のbbs.sqlでは、messages テーブルを作成して、messages テーブルに3件のレコードを作成します。
sqlite3
SQLite3 は スタンドアローンで動作するシンプルなデータベースです。Macの場合は標準でインストールされています。Windowsの場合は、以下のURLからダウンロードして利用できます。
https://www.sqlite.org/download.html
SQLite3はコマンドラインから起動します。
$ sqlite3 bbs.sqlite3
SQLite version 3.32.3 2020-06-18 14:16:19
Enter ".help" for usage hints.
sqlite>
サンプルプログラム
ここではBBSアプリケーションにおいてデータを messages テーブルに保存するように変更します。
bbs.php
<?php
// DB接続
$dsn = "sqlite:bbs.sqlite3";
$pdo = new PDO($dsn);
// SQL実行
$sql = "select id, contents from messages order by id";
$st = $pdo->query($sql);
$row = $st->fetch();
$messages = [];
while ($row !== false) {
$messages[] = $row["contents"];
$row = $st->fetch();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>My BBS</title>
</head>
<body>
<h1>My BBS</h1>
<hr>
<form action="bbs_post.php" method="post">
<input type="text" name="message">
<input type="submit" value="send">
</form>
<ul>
<?php for ($i = 0; $i < count($messages); $i++) { ?>
<li><?php echo htmlspecialchars($messages[$i]); ?></li>
<?php } ?>
</ul>
</body>
</html>
bbs_post.php
<?php
$message = (string)filter_input(INPUT_POST, "message");
if ($message != "" && mb_strlen($message) <= 14) {
// DB接続
$dsn = "sqlite:bbs.sqlite3";
$pdo = new PDO($dsn);
// SQLの実行
$sql = "insert into messages (contents) values (:contents)";
$ps = $pdo->prepare($sql);
$ps->bindValue(":contents", $message, PDO::PARAM_STR);
$ps->execute();
}
header("Location: bbs.php");
Webサーバの起動
PHPに付属しているビルトインWebサーバを起動するにはターミナルから以下のように入力します。
$ php -S localhost:8000
Webブラウザからアクセス
続いてWebブラウザからPHPプログラムにアクセスしてみましょう。以下のURLにアクセスします。
http://localhost:8000/bbs.php