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文
      • テーブル定義を削除する
  • DML
    • select文
      • テーブルのレコードを検索する
    • insert文
      • テーブルにレコードを作成する
    • update文
      • テーブルのレコードを更新する
    • delete文
      • テーブルのレコードを削除する

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