Presentation is loading. Please wait.

Presentation is loading. Please wait.

PHP と SQL (MySQL) の連携 複数のテーブルを扱う

Similar presentations


Presentation on theme: "PHP と SQL (MySQL) の連携 複数のテーブルを扱う"— Presentation transcript:

1 PHP と SQL (MySQL) の連携 複数のテーブルを扱う
2007/6/13 平成22年度 情報科学III (理系コア科目・2年生) PHP と SQL (MySQL) の連携  複数のテーブルを扱う 担当 岡村耕二 月曜日 2限 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明准教授等による以前の講義資料をもとにしています。 情報科学III(10)

2 前回のおさらい(1) 主な MySQL 関数 MySQL との通信 mysql_connect():MySQLへの接続
mysql_query():コマンドまたはSQL文の実行 mysql_select_db():データベースの切り替え mysql_close():MySQLからの切断 MySQL から受け取った検索結果の操作 mysql_fetch_array():検索結果から1行読み出す mysql_data_seek():読み出す位置を変更する mysql_num_rows():検索結果の行数を求める

3 前回のおさらい(2) PHP 4.x から MySQL 4.x を利用する際の標準的な作業手順 MySQLサーバへの接続
PHP の mysql_connect() 関数 通信に使用する文字コードの設定 PHP の mysql_query() 関数 + MySQL の SET CHARACTER SET 文 データベースの選択 PHP の mysql_select_db() 関数 データベースの操作 PHP の mysql_query() 関数 + MySQL の SELECT/INSERT/UPPDATE/DELETE 文 この④は繰り返してもよい.DBを切り替えるときは,③に戻る. MySQLサーバからの切断 PHP の mysql_close() 関数

4 前回のおさらい(3) $results =mysql_query($query, $link);
$row = mysql_fetch_array($results, MYSQL_ASSOC); mysql_fetch_array() mysql_query() $results $row MySQL DB 現在の 読み出し 位置 mysql_fetch_array() 関数は, $results の中に行が残っている限り,何度でも呼び出せる. 呼び出されるたびに,「現在の読み出し位置」が1レコード分だけ下に移動する. 配付資料では,図の部品に一部欠損があった.

5 PHPとMySQLについて 知っておくと役立つこと(つづき)
前回の「豆知識?」を改題

6 実際のデータベースでは… ブラウザ経由でやりたい仕事は,データの一覧表示だけではない. 与えられた条件に合致するデータの検索
新規データの登録 登録済みデータの修正 不要データの削除  : これらが,それぞれ別のプログラムになるのは,まぁしかたがない. しかし,1つの作業が済んだら,すぐに同じ名簿で別の作業を始めたくなるかも知れない.

7 「ファイル」メニューの「開く」をクリック
プログラムがいっぱいあると… やりたい処理のプログラムのURLを毎回直接指定する? 「ファイル」メニューの「開く」をクリック PHPプログラム1 =(URL1) そんな 面倒な! PHPプログラム2 =(URL2) PHPプログラム n =(URL n)

8 そういうときは… 最初のメニュー画面のURLだけを指定して,あとは,そこからクリックできるようにしたい. URLを指定して ここから先は
「開く」 ここから先は クリックだけ PHPプログラム1 MySQL DBMS PHPプログラム2 作業1 作業2 DB 作業 n PHPプログラム n

9 どのプログラムでも毎回同じになる部分がある
MySQL に接続してから,データベースを選択するまで MySQL から切断するところ 切断はPHPの文1行だけなのであまり問題がない. NySQLに接続するところから,データベースを選択するところまでは,パスワードやDB名を変更したりすると,書き換えが面倒. ①接続 PHPプログラム MySQL DBMS ②文字コード設定 ③DB選択 ④クエリ実行 DB ⑤検索結果の処理 ⑥切断

10 共通の部分を1つのファイルにまとめる 各プログラムに,そのファイルを読み込んで実行する. PHPプログラム1 PHPプログラム2 共通 部分
PHPプログラム n パスワードなどを変更した場合は,ここだけ修正すれば済む.

11 PHPでは… require 文 PHPプログラムのその場所に,指定したファイルを読み込んでそのまま実行させる.
ファイルが存在しない場合には,そこでエラーとなる. <?php require ( 'ファイル名' ); ?> PHPプログラム require 文の1行がまるまるこのプログラムで置き換わるイメージ (include 文もほぼ同じ効果を持つが,include 文は,ファイルが見つからなくてもエラーにならない)

12 しかも… 読み込まれるファイルの拡張子は,.php でなくてよい.
むしろ,dbconnect.inc などのように,わざと .php でない拡張子にするのがよい. web サーバの設定により,dbconnect.inc を直接URLで指定してもアクセスできないようにコントロールできるから. dbconnect.inc <?php require ( 'ファイル名' ); ?> PHPプログラム

13 PHP + MySQL のシステム構成例(1) PHPプログラム1 メインメニュー HTMLファイル
<form>タグがあるかもしれない PHPプログラム2 PHPプログラム2a これはきっと<form>タグを含んでいる. PHPプログラム n 共通 部分

14 PHP + MySQL のシステム構成例(2) PHPプログラム1 HTMLファイル 「終了」をクリック PHPプログラム2
PHPプログラム2a HTMLファイル 「お疲れ様でした.」 PHPプログラム n 共通 部分

15 さらに… これらのファイルは,すべて,同じディレクトリ(フォルダ)にまとめておくとよい.
~]$ cd public_html public_html]$ cd address_book address_book]$ ls -l 合計 20 -rw-r--r-- 1 te 月 12 22:47 dbconnect.inc -rw-r--r-- 1 te 月 12 22:47 end.html -rw-r--r-- 1 te 月 12 22:46 prog1.php -rw-r--r-- 1 te 月 12 22:46 prog2.php -rw-r--r-- 1 te 月 12 22:46 prog3.php : -rw-r--r-- 1 te 月 12 23:04 start.html address_book]$ 住所録関連のファイル

16 今日の作業(1) 前回作った(作りかけの)プログラムが public_html 直下にある場合は:
bossp にログインして,public_html の下に新しいディレクトリを作る (mkdir コマンド) 前回のプログラムを,その新しいディレクトリに移動させる (mv コマンド) PC側にファイルが残っていることが確認できたら,ファイルを削除する(rm コマンド)だけでもよい(要確認!). mkdir 新ディレクトリ名 mv ファイル名 移動先ディレクトリ rm ファイル名

17 今日の作業(2) PC側での作業 前回のプログラムから,MySQLへの接続とDBの選択の部分を切り出して,別のファイル(共通部分のファイル)に保存する. 今日のところは,ファイル名の拡張子は「.php 」にしておく. この理由は,次回説明する. 前回のプログラムの上記の部分は,require 文で置き換える. メインメニューのHTMLファイルを作り,そこからクリックだけで前回のプログラムに飛べるようにする. 他の作業をするためのPHPプログラムを作る必要はないが,他にどんなメニュー項目が必要か,考えて作っておくとよい. 逆に,プログラムを実行し終わったら,どうやってメインメニューに戻ったらよいか? できあがったファイル群を,bossp 上で先ほど作ったディレクトリに転送する.

18 そこまで終われば… ここまでできていることになる. PHPプログラム1 メインメニュー HTMLファイル PHPプログラム2
PHPプログラム2a PHPプログラム n 共通 部分

19 練習問題: まずSQLコマンドで、次にプログラムで
Projection をやってみよう。 Join をやってみよう。 SELECT [ALL | DISTINCT] SELECT項目リスト FROM テーブル名1[, テーブル名2, ...] [ JOIN 結合条件 ] [ WHERE 検索条件 ] SELECT [ALL | DISTINCT] SELECT項目リスト FROM テーブル名1[, テーブル名2, ...] [ JOIN 結合条件 ] [ WHERE 検索条件 ]

20 練習 DB jk2010 で以下の SQL を実行してみよ。
select * from table table ; Select * from table where vendor="nokia"; Select * from table table100628index; Select * from table table100628n; Select * from table table100628sa; Select * from table table100628so; Select * from table100628index join table100628n ; Select * from table100628index join table100628n on table100628index.type=table100628n.type; Select * from table100628index join table100628n on table100628index.type=table100628n.type where vendor="nokia"; select table100628index.vendor, table100628index.type, table100628n.name, table100628n.price from table100628index join table100628n on table100628index.type=table100628n.type where vendor="nokia";

21 table10062800 +--------------+-----------+------+--------+
| vendor | type | name | price | | nokia | cellphone | N97 | | | nokia | cellphone | N78 | | | nokia | cellphone | E71 | | | nokia | cellphone | E63 | | | nokia | bluetooth | BT00 | | | nokia | bluetooth | BT01 | | | samsung | cellphone | SS00 | | | nokia | cable | CA00 | | | nokia | cable | CA01 | | | samsung | cellphone | SS10 | | | samsung | bluetooth | BT00 | | | samsung | bluetooth | BT10 | | | sonyericsson | cellphone | X1 | | | sonyericsson | bluetooth | BT10 | |

22 select * from table10062800 where vendor="nokia";
| vendor | type | name | price | | nokia | cellphone | N97 | | | nokia | cellphone | N78 | | | nokia | cellphone | E71 | | | nokia | cellphone | E63 | | | nokia | bluetooth | BT00 | | | nokia | bluetooth | BT01 | | | nokia | cable | CA00 | | | nokia | cable | CA01 | |

23 taable100628index,n,sa,so +--------------+-----------+
| vendor | type | | nokia | cellphone | | nokia | bluetooth | | nokia | cable | | samsung | cellphone | | samsung | bluetooth | | sonyericsson | cellphone | | sonyericsson | bluetooth | | type | name | price | | cellphone | N97 | | | cellphone | N78 | | | cellphone | E71 | | | cellphone | E63 | | | bluetooth | BT01 | | | cable | CA00 | | | cable | CA01 | | | bluetooth | BT00 | | | type | name | price | | cellphone | SS00 | | | cellphone | SS10 | | | bluetooth | BT00 | | | bluetooth | BT10 | | | type | name | price | | cellphone | X1 | | | bluetooth | BT10 | |

24 select. from table100628index join table100628n on table100628index
select * from table100628index join table100628n on table100628index.type=table100628n.type; | vendor | type | type | name | price | | nokia | cellphone | cellphone | N97 | | | samsung | cellphone | cellphone | N97 | | | sonyericsson | cellphone | cellphone | N97 | | | nokia | cellphone | cellphone | N78 | | | samsung | cellphone | cellphone | N78 | | | sonyericsson | cellphone | cellphone | N78 | | | nokia | cellphone | cellphone | E71 | | | samsung | cellphone | cellphone | E71 | | | sonyericsson | cellphone | cellphone | E71 | | | nokia | cellphone | cellphone | E63 | | | samsung | cellphone | cellphone | E63 | | | sonyericsson | cellphone | cellphone | E63 | | | nokia | bluetooth | bluetooth | BT01 | | | samsung | bluetooth | bluetooth | BT01 | | | sonyericsson | bluetooth | bluetooth | BT01 | | | nokia | cable | cable | CA00 | | | nokia | cable | cable | CA01 | | | nokia | bluetooth | bluetooth | BT00 | | | samsung | bluetooth | bluetooth | BT00 | | | sonyericsson | bluetooth | bluetooth | BT00 | | table100628n table100628index table100628index.type=table100628n.type

25 select. from table100628index join table100628n on table100628index
select * from table100628index join table100628n on table100628index.type=table100628n.type where vendor="nokia“; | vendor | type | type | name | price | | nokia | cellphone | cellphone | N97 | | | nokia | cellphone | cellphone | N78 | | | nokia | cellphone | cellphone | E71 | | | nokia | cellphone | cellphone | E63 | | | nokia | bluetooth | bluetooth | BT01 | | | nokia | cable | cable | CA00 | | | nokia | cable | cable | CA01 | | | nokia | bluetooth | bluetooth | BT00 | |

26 select table100628index. vendor, table100628index. type, table100628n
select table100628index.vendor, table100628index.type, table100628n.name, table100628n.price from table100628index join table100628n on table100628index.type=table100628n.type where vendor="nokia"; | vendor | type | name | price | | nokia | cellphone | N97 | | | nokia | cellphone | N78 | | | nokia | cellphone | E71 | | | nokia | cellphone | E63 | | | nokia | bluetooth | BT01 | | | nokia | cable | CA00 | | | nokia | cable | CA01 | | | nokia | bluetooth | BT00 | |

27 演習問題 テーブルのカラムとして 商品名 価格 色 重さ
  を、用意し、「商品名」で検索し、「色」「重さ」はオプションで表示できるようなプログラムを作成せよ。 テーブル1 テーブル2 テーブル3 を用意して、「商品名」で検索して、「価格」「色」「重さ」が表示されるプログラムを作成せよ。

28 課題問題 店舗名と在庫の商品のテーブルを作成し、レコードを入力せよ。
店舗名と伊都キャンパスからの距離のテーブルを作成し、レコードを入力せよ。 伊都キャンパスからの距離を入力すれば、在庫の商品や店舗名が表示されるプログラムを作成せよ。


Download ppt "PHP と SQL (MySQL) の連携 複数のテーブルを扱う"

Similar presentations


Ads by Google