PHPからデータベースを操作(データの挿入、更新、削除)

(ブログ記事の一覧は「こちら」)

引き続き、PHPからSQLを実行してデータベースにアクセスする方法を学びましょう。
次は、データの挿入、更新、削除について確認しましょう。

ここで学ぶこと

  • PDO(PHP Data Object)
  • PHPからデータベースを操作

参考:

PHP Data Objects(PHPマニュアル)
PDOクラス(PHPマニュアル)

例題

データベース、テーブルは前のテーマで説明したものと同じものを使用します。
データの挿入、更新、削除の具体的な方法を学びます。

この例題では、送信側からデータを受け取った受信側についてのPHPプログラムを説明します。送信側のPHPプログラムは、課題1で取り組んでいただきます。

作成するもの

追加したレコードの全ての商品(name)をリストで一覧表示するPHPプログラムを作成します。

まず、「C:\xampp\htdocs」以下に「sample/food」フォルダを作成します。

データの挿入

PDOクラスによるレコードの追加を行います。
以下のPHPプログラム「insertFood_receive_pdo.php」を作成して、「food」フォルダに置きます。

<?php
    require_once('./dbConfig.php');

    $name = $_GET['name'];
    if (isset($name) == false) {
        die("'name'の設定なし");
    }

    $price = $_GET['price'];
    if (isset($price) == false) {
        die("'price'の設定なし");
    }

    // 接続
    try {
        $dsn = 'mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';charset=utf8';
        $pdo = new PDO($dsn, DB_USER, DB_PASS);
    } catch (PDOException $e) {
        die("接続に失敗しました" . $e->getMessage());
    }

    // レコード追加
    $sql = "INSERT INTO fruits_list (id, name, price) VALUES (null, :name, :price)";
    if ($stmt = $pdo->prepare($sql)) {
        $stmt->bindValue(':name', $name, PDO::PARAM_STR);
        $stmt->bindValue(':price', $price, PDO::PARAM_INT);
        $stmt->execute();
    }

    $pdo = null;

    echo $name . "を" . $price . "円で追加しました。";
?>

データベースの接続は前回と同じです。
レコードの追加は、以下の順序でプログラムが処理されます。

  1. PDOクラスのprepareメソッドでSQL文をセットする。(PDOStatementクラスの結果を返す)
  2. PDOStatementクラスのbindValueメソッドでパラメータに値をセットする。
  3. PDOStatementクラスのexecuteメソッドでクエリを実行する。

実行、確認

「insertFood_receive_pdo.php」を直接実行する例として、以下をブラウザで実行してみてください。

http://localhost/sample/food/insertFood_receive_pdo.php?name=メロン&price=1000

データの更新

PDOクラスによるレコードの更新を行います。
以下のPHPプログラム「updateFoodPrice_receive_pdo.php」を作成して、「food」フォルダに置きます。

<?php
    require_once('./dbConfig.php');

    $name = $_GET['name'];
    if (isset($name) == false) {
        die("'name'の設定なし");
    }

    $price = $_GET['price'];
    if (isset($price) == false) {
        die("'price'の設定なし");
    }

    // 接続
    try {
        $dsn = 'mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';charset=utf8';
        $pdo = new PDO($dsn, DB_USER, DB_PASS);
    } catch (PDOException $e) {
        die("接続に失敗しました" . $e->getMessage());
    }

    // レコード更新
    $sql = "UPDATE fruits_list SET price = :price WHERE name = :name";
    if ($stmt = $pdo->prepare($sql)) {
        $stmt->bindValue(':name', $name, PDO::PARAM_STR);
        $stmt->bindValue(':price', $price, PDO::PARAM_INT);
        $stmt->execute();
    }

    $pdo = null;

    echo $name . "を" . $price . "円に変更しました。";
?>

実行、確認

「updateFoodPrice_receive_pdo.php」を直接実行する例として、以下をブラウザで実行してみてください。

http://localhost/sample/food/updateFoodPrice_receive_pdo.php?name=みかん&price=180

データの削除

PDOクラスによるレコードの削除を行います。
以下のPHPプログラム「deleteFood_receive_pdo.php」を作成して、「food」フォルダに置きます。

<?php
    require_once('./dbConfig.php');

    $name = $_GET['name'];
    if (isset($name) == false) {
        die("'name'の設定なし");
    }

    // 接続
    try {
        $dsn = 'mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';charset=utf8';
        $pdo = new PDO($dsn, DB_USER, DB_PASS);
    } catch (PDOException $e) {
        die("接続に失敗しました" . $e->getMessage());
    }

    // レコード削除
    $sql = "DELETE FROM fruits_list WHERE name = :name";
    if ($stmt = $pdo->prepare($sql)) {
        $stmt->bindValue(':name', $name, PDO::PARAM_STR);
        $stmt->execute();
    }

    $pdo = null;

    echo $name . "を削除しました。";
?>

実行、確認

「deleteFood_receive_pdo.php」を直接実行する例として、以下をブラウザで実行してみてください。

http://localhost/sample/food/deleteFood_receive_pdo.php?name=みかん

課題1

次の内容の処理を行うPHPプログラムを作成してください。

  • 受信側「insertFood_receive_pdo.php」を呼び出すための、送信側のPHPプログラム「insertFood_send_pdo.php
    • 商品(name)、価格(price)を入力するテキストボックス、送信ボタン
  • 受信側「updateFoodPrice_receive_pdo.php」を呼び出すための、送信側のPHPプログラム「updateFoodPrice_send_pdo.php
    • 商品(name)、更新する価格(price)を入力するテキストボックス、送信ボタン
  • 受信側「deleteFood_receive_pdo.php」を呼び出すための、送信側のPHPプログラム「deleteFood_send_pdo.php
    • 商品(name)を入力するテキストボックス、送信ボタン

課題2

「updateFoodPrice_send_pdo.php」「updateFoodPrice_receive_pdo.php」を参考に、次の内容のプログラム「updateAddFoodPrice_send_pdo.php」「updateAddFoodPrice_receive_pdo.php」を作成してください。

  • 送信側(send)「updateAddFoodPrice_send_pdo.php

    • 商品(name)、加算する価格(price)を入力するテキストボックス、送信ボタン
  • 受信側(receive)「updateAddFoodPrice_receive_pdo.php

    • 送信側で受け取った「加算する価格」と「現在の価格」を加算して、「加算した新たな価格」としてレコードを更新する。

(例)
「updateAddFoodPrice_send_pdo.php」で、商品に「みかん」、加算する価格を「50」円と入力した場合、みかんの現在の価格が「100」円であるので、「150」円(100 + 50)としてレコードを更新する。