Presentation is loading. Please wait.

Presentation is loading. Please wait.

09 06/23 PHP と SQL (MySQL) の連携 その1

Similar presentations


Presentation on theme: "09 06/23 PHP と SQL (MySQL) の連携 その1"— Presentation transcript:

1 09 06/23 PHP と SQL (MySQL) の連携 その1
2007/6/6 平成21年度 情報科学III (理系コア科目・2年生) 09 06/23 PHP と SQL (MySQL) の連携 その1 担当 岡村耕二 月曜日 2限 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。 情報科学III(9)

2 前回のおさらい(1) SQLの機能の便宜的な分類 問い合わせ機能 SELECT ~ FROM ~ WHERE データ操作機能
INSERT 文 UPDATE 文 DELETE 文 データ定義機能 CREATE 文 DROP 文 ALTER 文 その他 ユーザ管理 セッション管理 前回の内容: 文法の座学+MySQL での実習 MySQLクライアントから利用するときは,文の末尾にセミコロン(;)を付ける必要がある.

3 前回のおさらい(2) INSERT 文 テーブルにレコードを挿入(追加)する. UPDATE 文 テーブル内のレコードの値を変更する.
INSERT [INTO] テーブル名 SET カラム=値[,カラム=値, ... ] INSERT [INTO] テーブル名 VALUES(値[, 値, ... ])[, (値[, 値, ... ]), ...] UPDATE テーブル名 SET カラム=値[,カラム=値, ... ] [WHERE 条件式 ]

4 前回のおさらい(3) DELETE 文 テーブル内のレコードを削除する. CREATE 文 データベースまたはテーブルを新規作成する
DELETE [FROM] テーブル名 [WHERE 条件式 ] CREATE DATABASE データベース名 CREATE TABLE テーブル名 ( カラム名 データ型 [NULL|NOT NULL] [カラムオプション], ... )

5 前回のおさらい(4) DROP 文 データベースまたはテーブルを削除する DROP TABLE テーブル名
DROP DATABASE データベース名

6 前回のおさらい(5) ALTER 文 テーブルの設定を変更する ALTER TABLE テーブル名
ADD [COLUMN] カラム定義 [FIRST|AFTER 既存カラム] [ADD ...] ALTER TABLE テーブル名 CHANGE [COLUMN] カラム名 カラム定義 [FIRST|AFTER 既存カラム] [CHANGE ...] ALTER TABLE テーブル名 DROP [COLUMN] カラム名 [DROP ...]

7 前回のおさらい(6) MySQLクライアントの起動 [te999999@bossp ~]$ mysql -p Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 150 to server version: Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> MySQLクライアントの起動 mysql> ... mysql> quit; Bye ~]$ MySQLクライアントの終了

8 MySQLにおける対話型作業の典型的な手順
サーバ bossp にログイン MySQLクライアントを起動(MySQLに接続) ~] mysql -p (新規データベースの場合のみ)データベース作成 mysql-> CREATE DATABASE dbname; 使用するデータベースの宣言 mysql-> use dbname; (新規テーブルの場合のみ)データ定義 mysql-> CREATE TABLE tablename データ操作 mysql-> SELECT/INSERT/UPDATE/DELETE etc. MySQL クライアントを終了(MySQLから切断) mysql-> quit; サーバ bossp からログアウト これらの手順を忘れると,CREATE TABLE 以下を正しく入力しても無視されてしまう.

9 データベースの対話的利用の問題点 それを利用する方法が SQL しかないとしたら… SQLの文法を理解しており,
しかも,毎回毎回,それを間違いなく入力しなければならない. 一方,現実にはDBの構造を変更することはそれほど多くはない. 普通の利用者は,SQLの文法よりも,もっと以下のようなことに注意を集中したい. データベースに新規登録する内容 データベースから検索する際の条件 表示される検索結果 こういったことは,HTML のフォーム機能と,サーバサイドプログラミングを使えば,実現できるはず.

10 今日やること PHP から MySQL を使う方法 PHP 4.x から MySQL を使う場合の標準的な作業手順
MySQL拡張サポート(PHP の MySQL関数)

11 PHP 4.x から MySQL 4.x を使う方法

12 PHP(HTML)とMySQL (1) 基本的な考え方
<form> タグで集めたデータを元に,PHPプログラムで MySQL にアクセス prog1.php このプログラムが DBへのアクセスを 担当する. クリック すると… <form ...> action 属性で prog1.php を指定している. 利用者からの入力データを集める. MySQL

13 PHP(HTML)とMySQL (2) 受け側の PHP プログラムも,(クリックした後に表示される) web ページになっている.
prog1.php さらに<form>タグが あれば,クリック先で さらにDBアクセスを 繰り返してもよい. ①クリック すると… <form ...> ③結果を web画面に 表示できる ②DBへ アクセス action 属性で prog1.php を 指定している. MySQL

14 PHPからMySQLを使う方法 PHP/MySQLのバージョンに応じて,いくつかの方法がある.
MySQL拡張サポート(いわゆるMySQL関数)を用いる PHP 4.x / 5.x → MySQL 3.x / 4.x ただし,MySQL 4.1 以降で導入された新機能は使えない. それらを使いたいときには下の mysqli を使う. MySQL 改良版拡張サポート(mysqli)を用いる PHP 5.x → MySQL 4.x PDO_MySQLを用いる(PDOは PHP Data Object の略) bossp では PHP:4.3.9 MySQL:4.1.20 なので,MySQL関数を用いることになる.

15 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() 関数

16 主な MySQL関数 MySQL との通信 mysql_connect() mysql_query() mysql_select_db()
mysql_close() MySQL から受け取った検索結果の操作 mysql_fetch_array() mysql_data_seek() mysql_num_rows()

17 mysql_connect() 関数(1) MySQL クライアントを起動する操作に類似
サーバ名とユーザ名とパスワードが必須 MySQL接続を表す変数 = mysql_connect(サーバ, ユーザ名, パスワード );

18 mysql_query() 関数 MySQLコマンドまたは SQL 文を実行する.

19 mysql_connect() 関数(2) 他のすべての MySQL 関数呼び出しよりも前に実行する.
このようにすれば,前のwebページの<form>タグで入力されたデータを受け取れる. 実行例 $server = $_POST["server"]; $mysqluser = $_POST["mysqluser"]; $mysqlpasswd = $_POST["msqlpasswd"]; $link = mysql_connect($server, $mysqluser, $mysqlpasswd); MySQLサーバ名 web (PHP)サーバと同じなら "localhost" でよい. (それの入った変数でもよい) MySQLユーザ名 MySQLクライアント起動時と違い省略不可 (それの入った変数でもよい) MySQLパスワード (それの入った変数でもよい) MySQL接続を表す変数:これはこの後のMySQL関数呼び出しでよく使う

20 mysql_query()を使ってできること(1)
MySQL の SET CHARACTER SET 文で,通信に使用する文字コードを設定する. MySQL クライアントを利用する場合には必要のなかった操作 しかし,PHP からアクセスする際には,これをやっておかないと,日本語文字列データに文字化けが発生する. 実行例 mysql_query("SET CHARACTER SET utf8", $link); MySQLコマンドの文字列 定数でも,文字列変数でもよい. 前に mysql_connect() 関数の戻り値を受け取った変数

21 mysql_query()を使ってできること(2)
(mysql_select_db() 関数を実行した後で) SELECT 文/その他のデータ操作文を実行する. SELECT 文による検索結果は,PHP の配列で受け取ることができる. 結果が複数のレコードになるときにも,この配列にすべて入っている. ただし,そこから1レコードだけ取り出すには,この後でmysql_fetch_array() 関数を用いる. 実行例 $results =mysql_query($query, $link); SELECTの結果を受け取る配列変数 SQL文の文字列 定数でも,文字列変数でもよい. 前に mysql_connect() 関数の戻り値を受け取った変数

22 mysql_select_db() 関数 MySQL クライアント起動後に,USE 文でデータベースを選ぶ操作に類似
実行例 mysql_select_db("te999999_greeting_cards", $link); データベース名の文字列 定数でも,文字列変数でもよい. 前に mysql_connect() 関数の戻り値を受け取った変数

23 mysql_close()関数 MySQL クライアントを終了する操作に類似 mysql_close(MySQL接続変数 ); 実行例
mysql_close($link); 前に mysql_connect() 関数の戻り値を受け取った変数

24 mysql_fetch_array()関数
mysql_query()関数による SELECT 文の結果を格納した配列または連想配列から,1行分のデータを取り出す. 1レコード分の(連想)配列 = mysql_fetch_array(結果全体の配列, 結果の型 ); 実行例1 $row = mysql_fetch_array($results, MYSQL_ASSOC); 連想配列 個々の項目は,次の行以降で,row["name"] のように参照する. 前にSELECTの結果を受け取った配列変数 連想配列で受け取るときは,これを指定 実行例2 $row = mysql_fetch_array($results, MYSQL_NUM); 配列で受け取るときは,これを指定 配列変数:個々の項目は,次の行以降で,row[0] のように参照する. 前にSELECTの結果を受け取った配列変数

25 mysql_query()と mysql_fetch_array()の関係
$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レコード分だけ下に移動する. row["name"] row["phone"] row["address"]

26 連想配列でないときは… $results =mysql_query($query, $link);
$row = mysql_fetch_array($results, MYSQL_NUM); mysql_fetch_array() mysql_query() $results $row MySQL DB 現在の 読み出し 位置 (ここでは添字式配列) mysql_fetch_array() 関数は, $results の中に行が残っている限り,何度でも呼び出せる. 呼び出されるたびに,「現在の読み出し位置」が1レコード分だけ下に移動する. row[0] row[2] row[1]

27 mysql_data_seek() 関数 「現在の読み出し位置」を指定した場所に移動させる.
SELECT 文の結果を受け取った配列をもう一度利用したいような場合に便利 mysql_data_seek(結果全体の配列, 移動先行番号 ); $results 実行例 mysql_data_seek($results, 0); 前にSELECTの結果を受け取った配列変数 先頭に戻したいときは,ゼロを指定

28 mysql_num_rows()関数 SELECT 文の結果を受け取った配列の,行数(レコード数)を調べる
$results 実行例 $count = mysql_num_rows($results); 行数 前にSELECTの結果を受け取った配列変数

29 例: http://bossp.is.kyushu-u.ac.jp/~oka/20090622/00/main.php
自分のデータベースにアクセスして,テーブルのレコードをブラウザに表示させるようなPHPプログラム。 <?php $server="localhost"; $user=“jk2009"; $passwd=“jk2009"; $link=mysql_connect($server,$user,$passwd); mysql_select_db("jk2009",$link); $results = mysql_query("select * from table090622",$link); printf("MYSQL_ASSOC <BR>"); $row = mysql_fetch_array($results,MYSQL_ASSOC); print_r($row); printf("<BR>");printf("<BR>"); printf("MYSQL_NUM <BR>"); $row = mysql_fetch_array($results,MYSQL_NUM); mysql_close($link); ?> ID/PASSWDを指定 データベース名を指定 テーブル名を指定

30 練習問題 自分のデータベースにアクセスして, テーブルのすべてのレコードをブラウザに表示させるようなPHPプログラムを作る.
自分のデータベースにアクセスして, Web で入力した Key の値にマッチするテーブルのレコードをブラウザに表示させるようなPHPプログラムを作る.

31 演習問題 Web 上で入力した値をデータベースに入力できるようにし,練習問題で作成したテーブルのレコードをすべてブラウザに表示させるプログラムと連動させて、入力後のデータベースの内容を確認したり、検索できるようにせよ。 データの入ったファイルをアップロードして、そのデータをデータベースに入力できるようにし,練習問題で作成したテーブルのレコードをすべてブラウザに表示させるプログラムと連動させて、入力後のデータベースの内容を確認したり、検索できるようにせよ。

32 PHPとMySQLについて 知っておくと役立つこと
「豆知識?」を改題

33 PHPからの「脱出」(第3回のスライド No. 20再掲)
1つのHTML文書の中で,「PHPから出たり入ったり」できる. PHPブロックを複数箇所に埋め込むことができる. <html> ... <body> <?php print("Hello, World!\n"); ?> <p>ここは HTML の1行目.</p> <?php print("Hello, World, Again!\n "); ?> <p>ここは HTML の2行目.</p> </body>  </html>

34 PHPが得意な部分とHTMLが得意な部分
何かの処理をするところ 条件判断をする 繰り返し処理をする MySQLにアクセスする HTMLが得意な部分の例(PHPでも書けるが,面倒) ヘッダ部分 画面表示を整えるところ 見出しを表示する 改行する(<br>タグ,<p>タグ)が多いところ 表を作成する 箇条書きを作成する

35 例えばこんなことも… HTML PHP mysql_connect() mysql_query() mysql_select_db()
mysql_num_rows() 見出し表示のためのHTML記述 PHP mysql_fetch_array() と print()による表示 の繰り返し メッセージ表示のためのHTML記述 PHP mysql_close()

36 レコードの数だけ繰り返すには while 文の,繰り返しを継続する条件のところで,mysql_fetch_array() 関数を使う 実行例
while ($row = mysql_fetch_array($results, MYSQL_ASSOC)) { print("氏名 : " . $row["name"] ."<br>\n"); print("〒 : " . $row["postal_code"] ."<br>\n"); print("住所1: " . $row["address1"] . "<br>\n"); print("住所2: " . $row["address2"] . "<br>\n"); print("電話 : " . $row["phone"] ."<br>\n<p>"); } 上の例では,文字列連結演算子(.)を用いて,print文の中(PHPの中)で行の整形(画面出力の整形)を行っている.


Download ppt "09 06/23 PHP と SQL (MySQL) の連携 その1"

Similar presentations


Ads by Google