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

Slides:



Advertisements
Similar presentations
1 実技演習1 2008/01/28,29 JaLTER Morpho 講習会. 2 起動・接続 各自、コンピュータを起動してネットワーク に接続してください。 各自、コンピュータを起動してネットワーク に接続してください。 IP アドレス自動取得 IP アドレス自動取得 無線 LAN 使用可 無線.
Advertisements

1 WORD の起動法と終了法 ● WORD の起動法 (1) デスクトップの Microsoft Word アイ コンをダブルクリックする。 * (2) 「スタート」 ― 「すべてのプログラ ム」 ― 「 Microsoft Word 」と選ぶ。 (3) Word で作成された文書があるとき は、そのアイコンをダブルクリック.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
SQLite3
インターネット技術特論 H:SQLite3 山口 実靖
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
情報理工学部 情報システム工学科 3年 H 井奈波 和也
SQL データベースアクセスのための文法と MySQL
JPAを利用した RESTful Webサービスの開発
SQLエディタによる データベースプログラミング
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
WEBから確認できる 駐車場管理システムについて
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
MySQLに接続するデータベースプログラム
PHPエディタによる 情報システム演習 01.
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
SQL J2EE I 第3回 /
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第4回 個人の動画配信補足のためのWeb構築
Bottle/Pythonによる Webアプリ入門
Web App Semi 2008 #1 Web App Semi 2008 #1.
PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
3-2.データを取り出す 2004年 5月20日(木) 01T6074X 茂木啓悟.
第6章 2重ループ&配列 2重ループと配列をやります.
4-3.基本的なPHPスクリプト 2004年6月24日(木) 大北高広 01T6010F.
PHP 概要 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
Day3 Day4 Day3 Day4.
 データベースによる並列処理 情報論理工学研究室  三宅健太.
09 06/23 PHP と SQL (MySQL) の連携 その2
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
データベース設計 第9回 Webインタフェースの作成(1)
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
第8章 Web技術とセキュリティ   岡本 好未.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
2004/05/13 3-4 データ型(カラムタイプ) について 発表者:藤村元彦 自然言語処理研究室.
SQL データベースアクセスのための文法 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
第1回.リレーショナルデータベースを使ってみよう
第1回.リレーショナルデータベースを使ってみよう
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
第3回.テーブルの結合 結合条件 SQL を用いた結合問い合わせ.
PHP と SQL (MySQL) の連携 複数のテーブルを扱う
Javaによる Webアプリケーション入門 第7回
3-6.インデックスについて 3-7.関数と併用されることの 多いMySQLコマンド
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
第5回 個人の動画配信補足のためのWeb構築
09 06/23 PHP と SQL (MySQL) の連携 その2
PHP と SQL (MySQL) の連携 大量のデータを扱う
コンピュータ プレゼンテーション.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
3.リレーショナルデータベース,主キー, SQL
JDBC ソフトウェア特論 第3回.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
関係データベースとSQL MZ Platform講習会(上級).
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
09 06/23 PHP と SQL (MySQL) の連携 その3
PHP と SQL (MySQL) の連携 日本語のデータを扱う
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
SQL J2EE I (データベース論) 第3回 /
SQL データベース論 第11回.
Presentation transcript:

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

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

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

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

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

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

前回のおさらい(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: 4.1.20 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> MySQLクライアントの起動 mysql> ... mysql> quit; Bye [te999999@bossp ~]$ MySQLクライアントの終了

MySQLにおける対話型作業の典型的な手順 サーバ bossp にログイン MySQLクライアントを起動(MySQLに接続) [te999999@bossp ~] 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 以下を正しく入力しても無視されてしまう.

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

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

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

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

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

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関数を用いることになる.

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

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

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

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

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関数呼び出しでよく使う

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

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

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

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

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の結果を受け取った配列変数

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"]

連想配列でないときは… $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]

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

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

例: 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を指定 データベース名を指定 テーブル名を指定

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

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

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

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>

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

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

レコードの数だけ繰り返すには 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の中)で行の整形(画面出力の整形)を行っている.