PHPを使い始めるとデータを保存しなければいけない機会が何度も来ます。
この記事では
WordPressでもお馴染みのMySQLを使って
- データを保存して
- 保存したデータを呼び出し
の仕方を解説します。
これが出来ると
- 掲示板
- ブログ
- 登録、保存、表示
するような基礎的なものであれば何でも作れる様になりますのでやっていきましょう。
【動作環境】 すでにデータベースのMySQL、PHPがインストールされている状態とします。
目次
PHPで登録ページを作成する
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登録ページ</title>
</head>
<body>
<div id="post">
<form method="post" action="post.php">
<div>name <input type="text" name="name" size="30"></div>
<div>category <input type="text" name="category" size="30"></div>
<div>description <textarea name="description" cols="30" rows="10"></textarea></div>
<div><input type="submit" name="submit" value="投稿"></div>
</form>
</div>
</body>
</html>
まずは簡単な入力フォームを作ります。拡張子は.phpで保存します。
投稿と確認用画面を作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登録結果</title>
</head>
<body>
<?php
// ブラウザでエラー確認が出来るようにします
ini_set('display_errors', 1);
error_reporting(E_ALL);
try {
//データベース名、ユーザー名、パスワード
$dsn = 'mysql:dbname=データベース名;host=localhost;charset=utf8';
$user = 'データベースへログインするためのユーザー名';
$password = 'データベースへログインするためのパスワード';
//MySQLのデータベースに接続
$pdo = new PDO($dsn, $user, $password);
//PDOのエラーレポートを表示
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//index.phpの値を取得
// あらかじめMySQL内にテーブルとカラムを作成しておく必要がある
$name = $_POST['name'];
$category = $_POST['category'];
$description = $_POST['description'];
// INSERT文を変数に格納
// あらかじめMySQL内にテーブルとカラムを作成しておく必要がある
$sql = "INSERT INTO contents (name, category, description) VALUES (:name, :category, :description)";
//挿入する値は空のまま、SQL実行の準備をする
$stmt = $pdo->prepare($sql);
// 挿入する値を配列に格納する
$params = array(':name' => $name, ':category' => $category, ':description' => $description);
//挿入する値が入った変数をexecuteにセットしてSQLを実行
$stmt->execute($params);
echo "お名前: ".$name."<br>";
echo "カテゴリー: ".$category."<br>";
echo "説明文: ".$description."<br>";
echo "で登録しました";
} catch (PDOException $e) {
exit('データベースに接続できませんでした。' . $e->getMessage());
}
?>
</body>
</html>
これで
- 保存
- 保存した内容の確認画面
が作成できました。
MySQLのデータベース作成
データベースに接続したら登録・保存する為の
- データベース名
- テーブル名
- カラム名
の作成を行います。
今回はPhpMyAdminから作成を行います。
MySQLのテーブル名、カラム名の作成
作成するテーブル名は
- contents
カラム名は
- id(データ型はBIGINT)
- name(VARCHAR)
- category(VARCHAR)
- description(VARCHAR)
の4つです。
IDには自動で数字が割り当てできるように
- インデックス>UNIQUE
- AI(AUTO_INCREMENT)>チェックを入れる
これで自動で1番から割り振られます。
データベースに保存が出来たかの確認
先ほど作った投稿画面ですね。
先ほど作った投稿した結果の画面です。
MySQLがどうなったかというと
登録したデータをデータベースから呼び出して取得する
データベースに登録したデータを表示します
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登録データ情報</title>
</head>
<body>
<h1>登録データ情報</h1>
<?php
//データベース名、ユーザー名、パスワード
$dsn = 'mysql:dbname=データベース名;host=localhost;charset=utf8';
$user = 'データベースへログインするためのユーザー名';
$password = 'データベースへログインするためのパスワード';
//MySQLのデータベースに接続
$pdo = new PDO($dsn, $user, $password);
// テーブル個別 ID 3 で呼び出す場合
$user_id = 3;
$sql = "SELECT * FROM contents WHERE id IN(".$user_id.")";
$result_rows = $pdo->query($sql);
// テーブル全行取得(データ取得)
$result_list = $pdo->query('SELECT * FROM contents');
?>
<h2>全リスト取得</h2>
<?php foreach ( $result_list as $row ): ?>
<?= "ID: {$row['id']} <br>" ?>
<?= "お名前: {$row['name']} <br>" ?>
<?= "カテゴリー: {$row['category']} <br>"; ?>
<?= "説明文: {$row['description']} <br>" ?>
<?php endforeach; ?>
<h2>個別データ取得</h2>
<?php foreach ( $result_rows as $row ): ?>
<?= "ID: {$row['id']} <br>" ?>
<?= "お名前: {$row['name']} <br>" ?>
<?= "カテゴリー: {$row['category']} <br>"; ?>
<?= "説明文: {$row['description']} <br>" ?>
<?php endforeach; ?>
</body>
</html>
このように保存したデータを取得して表示することができました。
番外編:MySQLのデータベースは何文字まで保存できるのか?
データベースの何文字まで登録できるのか?の回答は
InnoDB では内部的に 65,535 バイトを超える行サイズがサポート
MySQL 自体では、すべてのカラムを結合したサイズに 65,535 行のサイズ制限
- 65,535÷4バイト(UTF-8 日本語や絵文字)=16,383文字
正解は1行1.6万文字ぐらいが保存できます。
全部2バイトの文字なら単純に倍だけど、余裕をもった設計にした方が吉。