PHPからデータベースを操作(データの挿入、更新、削除)
(ブログ記事の一覧は「こちら」)
引き続き、PHPからSQLを実行してデータベースにアクセスする方法を学びましょう。
次は、データの挿入、更新、削除について確認しましょう。
ここで学ぶこと
参考:
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 . "円で追加しました。"; ?>
データベースの接続は前回と同じです。
レコードの追加は、以下の順序でプログラムが処理されます。
- PDOクラスのprepareメソッドでSQL文をセットする。(PDOStatementクラスの結果を返す)
- PDOStatementクラスのbindValueメソッドでパラメータに値をセットする。
- 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)としてレコードを更新する。