[掲載日] (更新日) この記事は約 9 分で読めます

PHPにMySQLを接続してデータベース保存からのデータ取得まで

PHPにMySQLを接続してデータベース保存からのデータ取得まで

PHPを使い始めるとデータを保存しなければいけない機会が何度も来ます。

この記事では

WordPressでもお馴染みのMySQLを使って

  1. データを保存して
  2. 保存したデータを呼び出し

の仕方を解説します。

これが出来ると

  • 掲示板
  • ブログ
  • 登録、保存、表示

するような基礎的なものであれば何でも作れる様になりますのでやっていきましょう。

【動作環境】
すでにデータベースのMySQL、PHPがインストールされている状態とします。

Ruby on Railsのプログラミングを最短1ヶ月で習得
RailsHack講座では13日間の無料期間(全額返金保証)で安心のスクールです。
WEBアプリケーションが実際に作成できます。
» RailsHack講座の13日間の無料体験(全額返金保証)はこちら

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からデータベースの作成
phpMyAdminからデータベースの作成

今回はPhpMyAdminから作成を行います。

MySQLのテーブル名、カラム名の作成

テーブル名とカラム名の作成を行い保存を押します
テーブル名とカラム名の作成を行い保存を押します

作成するテーブル名は

  • contents

カラム名は

  1. id(データ型はBIGINT)
  2. name(VARCHAR)
  3. category(VARCHAR)
  4. description(VARCHAR)

の4つです。

IDには自動で数字が割り当てできるように

  • インデックス>UNIQUE
  • AI(AUTO_INCREMENT)>チェックを入れる

これで自動で1番から割り振られます。

データベースに保存が出来たかの確認

登録ページindex.php
登録ページindex.php

先ほど作った投稿画面ですね。

登録結果画面
登録結果画面 post.php

先ほど作った投稿した結果の画面です。

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バイトの文字なら単純に倍だけど、余裕をもった設計にした方が吉。

挫折しそうなプログラミングなら動画講座。30日間全額返金保証