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

記事内にプロモーションリンクが含まれる場合があります。

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

この記事では

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

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

の仕方を解説します。

これが出来ると

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

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

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

無料パソコンスクール講座
WordPress・SEO・プログラミング

あなたは以下のことで 悩んでないだろうか?

「フリーランスになりたいけど稼げるか不安だ」
「クラウドソーシングや営業して稼げるか不安だ」
「転職で必要になり困っている」
「スマホはあるけどパソコンが古くて不安だ」
「広告やLINEからの集客を得たい」
「仕事でグラフや資料制作を思うように作れない」
「プログラミングを学習して副業したいけど不安だ」
「副業をはじめたが、いっこうに成果がでない」
「退職してノートパソコンだけで収入を得たい」
「何がわからないかわからない状態が続き何度も挫折した」
「在宅で稼げるようになりたい」
「副業で収入を得たい」

そんなお悩みのあなたにこそ
取得して頂きたい内容です!

このメディアを運営している制作・プログラミング相談のプロが
全て無料で相談と学習できるように
無料スクールのメルマガ講座を開設しました。

\今なら300部限定無料ダウンロード/

今すぐ無料ダウンロードする

いまなら、先着300部限定で無料プレゼント付です。

今すぐ無料ダウンロードする

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

この記事を書いた人

よこやま良平

よこやま良平

こんにちは!18年以上ITエンジニアとして活動してきた
よこやま良平です。

4歳~85歳まで、年間1,792人名以上の方に
パソコンやプログラミング講座を行ってきました。

また18冊以上の書籍を出版しており、連続で1位を獲得しました。
オンライン講座では200件以上のレビューを頂いており
評価は4.9/5.0と高評価を得ています。

その他これまでに3000以上のサービス・システム・サイトを作成。