第12章 PHPとデータベースの連携

12.6 データの更新をしてみよう

前節ではデータベースからデータを検索(取得)する仕組みを学習しました。SQL文を発行する仕組み「mysqli_query関数」を利用すれば、SELECT文だけではなく「INSERT文、UPDATE文、DELETE文」といった更新系のSQL文を発行することもできます。
上記の操作を行うためには、新しい関数は必要なくこれまで学習したmysqli関数で行えます。また、更新系のSQL文はSELECT文のSQL文と違って検索結果の情報がない(更新系の戻り値はSQL文の成否「true/false」になります)ので、結果セットの開放を行う必要がありません(※12.2.1 項の図を参照)。

それでは、次の項より更新系のSQL文の発行を行うプログラムを見て行きましょう。

12.6.1 データベースへ新規データを登録してみよう

データベースへINSERT文のSQL文を発行するには、SELECT文を発行するのに利用した「mysqli_query関数」を利用すれば行えます。

書式:SQL文(更新系)の発行

第1引数の$接続情報には、MariaDBサーバへ接続した際の戻り値「接続情報(ID)」を、第2引数は発行したいSQL文を設定します。SELECT文のSQL文と比べると、戻り値は失敗なら同じ「false」ですが、成功の場合「結果セット」ではなく「true」に変わります。この理由のため結果セットの開放が必要なくなっています。間違って開放を行ってしまうとエラーになるので注意が必要です。

画面で入力した情報をデータベースに新しく登録するプログラム

別の画面から商品情報を入力し、その情報を元にデータベースへデータの登録を行います。

ソース・フォルダー: myproj_basic/ch12
パッケージ: insertForm.php
アクセスURL:http://localhost/myproj_basic/ch12/insertForm.php

insertForm.php

ソース・フォルダー: myproj_basic/ch12
パッケージ: insertQuery.php
アクセスURL:insertForm.phpからの画面遷移でアクセスされる

insertQuery.php

実行結果

登録データの確認

「insertQuery.php」の画面に12.5.2で作成した「selectAll.php」へのリンクを用意して確認します。

解説

今回のプログラムは別画面の入力データを元に、INSERT文のSQL文をデータベースに発行しデータの登録を行います。
MariaDBサーバへ接続からデータベースの選択の流れは同じで、16行目のデータベースへ発行するSQL文がINSERT文になっているだけです。

19行目で実行結果の入力データの場合「INSERT INTO iteminfo VALUES(‘0006’ , ‘万年筆’ , 850 )」というSQL文をデータベースに発行します。この処理だけでデータベースにデータの登録が完了します。

重複したIDデータの登録は行えない

iteminfoテーブルのidは「主キー」として設定されているため、同じidのデータは登録できません。間違って重複したIDを登録しようとすると、エラーメッセージが表示されるので注意して下さい。

12.6.2 データベースへUPDATE文を発行してみよう

データベースへUPDATE文のSQL文を発行するには、前項と同じ「mysqli_query関数」で行えます。設定するSQL文がUPDATE文に変わるだけです。

画面に入力した情報でデータベースのデータを変更するプログラム

別の画面から商品情報を入力し、その情報を元にデータベースへデータの変更を行います。

ソース・フォルダー: myproj_basic/ch12
パッケージ: updateForm.php
アクセスURL:http://localhost/myproj_basic/ch12/updateForm.php

updateForm.php

ソース・フォルダー: myproj_basic/ch12
パッケージ: updateQuery.php
アクセスURL:updateForm.phpからの画面遷移でアクセスされる

updateQuery.php

実行結果

変更データの確認

「updateQuery.php」の画面に12.5.2で作成した「selectAll.php」へのリンクを用意して確認します。

解説

今回のプログラムは別画面の入力データを元に、UPDATE文のSQL文をデータベースに発行しデータの変更を行います。データの変更を行う場合、前項のプログラムと同様にmysqli_query関数で行います。
16行目でUPDATE文のSQL文を設定し、19行目でデータベースにそのSQL文の発行を行っています。今回の実行結果の場合SQL文は「UPDATE iteminfo SET name=’高級万年筆’, price=3300 WHERE id = ‘0006’」を発行することになり、「iteminfoテーブルのidが0006を対象に、商品のタイトルを高級万年筆に価格を3300に変更しなさい」という意味になります。

テーブルにないデータは変更していない

本項のプログラムでは更新対象のデータがあってもなくても、データベースにSQL文を発行します。その結果、更新対象のIDがなくても「更新しました」と画面に出ますが、実際データベースのデータには何の変更も行われていません。これは次項で行う削除処理の場合も同じになります。
データベースに更新を行う場合は、対象データの有無を事前に確認して行うのが安全な方法になります。

12.6.3 データベースへDELETE文を発行してみよう

データベースへDELETE文のSQL文を発行するには、前項までと同じ「mysqli_query関数」で行えます。設定するSQL文がDELETE文に変わるだけです。

画面に入力した情報でデータベースのデータを削除するプログラム

別の画面から商品IDを入力し、その情報を元にデータベースのデータの削除を行います。

ソース・フォルダー: myproj_basic/ch12
パッケージ: deleteForm.php
アクセスURL:http://localhost/myproj_basic/ch12/deleteForm.php

deleteForm.php

ソース・フォルダー: myproj_basic/ch12
パッケージ: deleteQuery.php
アクセスURL:deleteForm.phpからの画面遷移でアクセスされる

deleteQuery.php

実行結果

削除データの確認

「deleteQuery.php」の画面に12.5.2で作成した「selectAll.php」へのリンクを用意して確認します。

解説

今回のプログラムは別画面の入力データを元に、DELETE文のSQL文をデータベースに発行しデータの削除を行います。データの削除を行う場合も、これまでの更新系のSQL文を発行してきたようにmysqli_query関数で行えます。
16行目でDELETE文のSQL文を設定し、19行目でデータベースにそのSQL文の発行を行っています。今回の実行結果の場合SQL文は「DELETE FROM iteminfo WHERE id=’0006’」を発行することになり、「idが0006のデータをiteminfoテーブルから削除しなさい」という意味になります。

本格的なWebアプリケーションを作成するには、データベースとの連携は欠かせません。本節までに習ったデータベース操作の仕組みをきちんと理解しておいて下さい。

NEXT>> 12.7 データベースの操作を関数を使って共通化してみよう