Gorinphp0729

490 views
449 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
490
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Gorinphp0729

  1. 1.  AW技能五輪 第一回 PHPセミナー 資料  技能五輪  若年者ものづくり競技大会  出場者向け  第一回 PHPセミナー 資料 講師  : 塚田 朗弘 資料作成: 電設部技能五輪プロジェクト サポート: 電設部技能五輪プロジェクト 初版  : 2009年07月29日 第四版 : 2009年08月05日 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  2. 2.  講師紹介 名前 : 塚田 朗弘(つかだ あきひろ)    学科 : 高度情報処理科(07JZ) 所属 : 電設部(IT勉強会PJTリーダ) ID   : atcorp(はてな・ついったー)   その他 : http://tinyurl.com/atcorp-at-it         ↑いますぐクリック! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  3. 3.  も く じ1.配列の操作 2.データベース(mysql)の操作1-1. "配列"ってなんだろう 5 2-1. データベースって何だろう 171-2. "配列"をイメージしよう 6 2-2. データベースをイメージしよう 181-3. こんなときによく使う 9 2-3. 対五輪必須DBテクニック 211-4. 演習課題をやってみよう 10 2-4. 実習環境の準備 221-5. 演習課題こたえあわせ 11 2-5. データの登録 251-6. 配列の操作 まとめ 14 2-6. データの検索 31 2-7. データの更新 39 2-8. データの削除 43 2-9. ここまでのまとめ 47 2-10. PHP de SQL 48 2-11. DBに接続・切断する 49 2-12. SQL実行の基本的な流れ 52 2-13. 文字セット設定 53 2-14. SQL実行と結果セット 56 2-15. 演習問題をやってみよう 62 2-16. 演習問題こたえあわせ 65 2-17. データベースの操作 まとめ 71 2-18. おわりに 72 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  4. 4.  1. 配列の操作 第一部 配列の操作 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  5. 5.  1. 配列の操作 1-1. "配列"って何だろう ◆配列は、変数(頭に$がつくもの)の仲間。  変数と配列の違いは・・・    ・変数は     一つの変数の中で一つの値    ・配列は     一つの配列の中で複数の値                       を扱う! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  6. 6.  1. 配列の操作 1-2. "配列"をイメージしよう(1) ◆ まず、単なる変数 は 「ハコ」 です sample1_2_1.php ※ 変数$medalには、 <?php  一度に一つの値だけが入る。   $medal = "金メダル";   print $medal;   ?>※C:xampphtdocsgorinphpseminar02 の中に作ってください。 その後、ブラウザで http://localhost/gorinphp/seminar02/sample1_2_1.php にアクセスすると動作確認できます。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  7. 7.  1. 配列の操作 1-2. "配列"をイメージしよう(2) ◆ 対して、配列は 「仕切られたハコ」です sample1_2_2.php 数字で仕切られたそれぞれに、 値を入れておける。 <?php    $medals[0]="金メダル"; $medals[1]="銀メダル"; $medals[2]="銅メダル"; print $medals[0]; ?> 配列の[ ]内の数字を、 「添え字」とか「インデックス」と言います。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  8. 8.  1. 配列の操作 1-2. "配列"をイメージしよう(3) ◆ 「添え字」は数字じゃなくてもOK! sample1_2_3.php ”gold”などの文字列が添え字。 <?php      $medals["gold"]="金";   $medals["silver"]="銀";   $medals["bronze"]="銅";     print $medals["gold"];   ?> 「文字列を添え字にした配列」 を 連想配列 と言います。 「gold?あ、金ね。金。」って、連想してるっぽいでしょう? AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  9. 9.  1. 配列の操作 1-3. こんなときによく使う ◆ たくさんあるデータに片っ端からアクセス 配列は、多くの値を中に入れて、 順番に使っていく「繰り返し処理」が大得意です。 例)・クラス内の学生全員を一覧表示する。 配列の中身を片っ端から <tr> <td> ***** </td> <td> ***** </td> 学生 DBから <td> ***** </td> DB </tr> 学生のデータを これに入れていく(繰り返し処理) 取得し、配列に 入れる 0 1 2 3 4 5 ・・・ ・ ・ ・ AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  10. 10.  1. 配列の操作 1-4. 演習課題をやってみよう ex1_4_1.php 配列 $aw[] の、添え字 0 から順番に、 添え字 値 右のデータを入れるプログラムを書いてください。 0 織田信永 その中から自分の名前を取り出して 表示してみましょう。 1 野比のび犬   2 鈴木一浪   表示方法のヒント) print $aw[??]; 3 自分の氏名   時間に余裕がある人は、自分以外の名前を 4 骨川スネ夫 表示するなど、遊んでみてください。 ex1_4_2.php 配列 $aw[] に、姓を添え字、名を値として 添え字 値 右に示すデータを入れて、その中から 織田 信永 色々な人の名前を取り出して表示してみましょう。 野比 のび犬 鈴木 一浪 自分の姓 自分の名 骨川 スネ夫 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  11. 11.  1. 配列の操作 1-5. 演習課題こたえあわせ ex1_4_1.php   ex1_4_2.php AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  12. 12.  1. 配列の操作 1-5. 演習課題こたえあわせ ex1_4_1.php   ex1_4_2.php <?php $aw[0] = "織田信永"; $aw[1] = "野比のび太"; $aw[2] = "鈴木一浪"; $aw[3] = "電子太郎"; $aw[4] = "骨川スネ夫"; print $aw[3]; ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  13. 13.  1. 配列の操作 1-5. 演習課題こたえあわせ ex1_4_1.php   ex1_4_2.php <?php <?php $aw[0] = "織田信永"; $aw["織田"] = "信永"; $aw[1] = "野比のび太"; $aw["野比"] = "のび太"; $aw[2] = "鈴木一浪"; $aw["鈴木"] = "一浪"; $aw[3] = "電子太郎"; $aw["電子"] = "太郎"; $aw[4] = "骨川スネ夫"; $aw["骨川"] = "スネ夫"; print $aw[3]; print $aw["電子"]; ?> ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  14. 14.  1. 配列の操作 1-6. 配列の操作 まとめ◆配列一個で、複数の値を扱える! →変数は「ハコ」、    配列は「区切られたハコ」◆添え字は数字でも文字列でもOK! →文字列の添え字 = 連想配列◆例えばこんなときに使います。 →データベースから取得したデータに、   片っ端からアクセスして表示したり    計算したりするとき! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  15. 15.  1. 配列の操作 第一部 配列の操作 完 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  16. 16.  2. データベース(mysql)の操作 第二部 データベース (MySQL) の操作 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  17. 17.  2. データベース(mysql)の操作 2-1. データベースって何だろう ◆ 「膨大なデータを素早く安全に扱うソフト」 1)RDB(リレーショナルデータベース)が主流。   2次元の表形式でデータを扱う。 2)膨大なデータ量と高速なパフォーマンス。   エクセルでは、せいぜい1000件のデータ内を検索すれば   「フリーズ→落ちる→データ消える→泣く」ことになる。   DBでは、数千万件のデータを安定して扱い、且つ高速に   検索・更新・登録・削除することができる。 3)データの損失、不正アクセス、漏洩を防ぐ。   同時アクセスの制御、バックアップとリカバリ機能、   細かく設定できる権限制御などにより、安全にデータを   管理してくれる。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  18. 18.  2. データベース(mysql)の操作 2-2. データベースをイメージしよう(1) ◆ 世間でのMySQLの使用例 - mixi 会員数2000万人のmixiはMySQLを使用。  ・日記データの検索や日記の投稿 fakj 1 213 ふぇ 1 213 えd 321 1 MySQLサーバ  ・コミュニティ参加者一覧の表示 321 321 213 1 321 321 321 1 1 321 321 321 1 321 1 fakj ふぇ えd 321 1 1 fakj ふぇ えd 1 1 321 1 1 321 213 213 1 213 213 1 321 321 213  ・新規ユーザ登録 321 321 213 1 321 321 1 321 321 321 1 1 321 1 1 321 321 321 321 321 321 1 321 1 1 321 1 321 1 1 321 1 1  ・ユーザパスワード管理 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1  ・トピックへの新書き込み登録 ・・・etc 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 複雑な機能を高パフォーマンスで実現。 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 fakj ふぇ えd 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 321 213 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 1 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 インターネット 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 mixi fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd ブラウザ 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 サーバ fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 fakj ふぇ えd 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 213 213 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 213 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 1 321 321 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 321 1 1 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 1 321 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd fakj ふぇ えd 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 213 213 1 213 213 1 213 213 1 213 213 1 213 213 1 321 321 213 321 321 213 321 321 213 321 321 213 321 321 213 1 321 321 1 321 321 1 321 321 1 321 321 1 321 321 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 321 321 321 321 321 321 321 321 321 321 321 321 321 321 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 321 1 1 321 1 1 321 1 1 321 1 1 321 1 1 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  19. 19.  2. データベース(mysql)の操作 2-2. データベースをイメージしよう(2) ◆ phpとMySQLの関係図 ブ 6.レスポンス サーバマシン ラ ウ (htmlソース) ザ wwwサーバ(apache) 1.httpリクエスト 2. 5. php html 実行 出力 php 3. 4. SQL 実行 実行 結果 DBサーバ(MySQL) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  20. 20.  2. データベース(mysql)の操作 2-2. データベースをイメージしよう(2) ◆ phpとMySQLの関係図 ブ 6.レスポンス サーバマシン ラ ウ (htmlソース) ザ wwwサーバ(apache) 1.httpリクエスト 2. 5. php html 実行 出力 php 今から学ぶのは 3. 4. SQL 実行 3 と 4 実行 結果 の部分です。 DBサーバ(MySQL) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  21. 21.  2. データベース(mysql)の操作 2-3. 対五輪必須DBテクニック ◆ 五輪本番で必要なDBテクニック 1)DBの操作(SQL文)    - データ取得 (SELECT文)    - データ登録 (INSERT文)    - データ更新 (UPDATE文)     - データ削除 (DELETE文) 2)phpでSQLを使う方法 (php)    - DBへの接続    - SQLの実行    - DBへの接続を切断 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  22. 22.  2. データベース(mysql)の操作 2-4. 実習環境の準備(1) ◆ phpMyAdminの用意 ・「phpMyAdmin」とは、ブラウザでMySQLの操作・管理が  できるようにするためのWebツール ・データベースの中身を表示したり、SQL文の  構文を確認したり という使い方(あくまでも補助ツール) ・本番でも使用可能! Step1.  http://localhost/xampp/  にアクセス Step2.  xamppの左側メニューから、「phpMyAdmin」をクリック AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  23. 23.  2. データベース(mysql)の操作 2-4. 実習環境の準備(2) ◆ サンプルDBと表の作成 実習に使う、サンプルのDBを作成します。 Step1.  http://localhost/gorinphp/phpmyadminを開く CREATE DATABASE gorinphp0729 DEFAULT   CHARACTER SET eucjpms COLLATE eucjpms_japanese_ci;; Step2. USE gorinphp0729;  右フレーム内上部のメニューより「SQL」を CREATE TABLE contest ( skillname VARCHAR(40), expert VARCHAR(40),  クリック mail VARCHAR(40), uid CHAR(4) );   CREATE TABLE user ( Step3.  uid CHAR(4) NOT NULL, pass VARCHAR(10), expert VARCHAR(40),  「サーバ "localhost" 上でクエリを実行する」の mail VARCHAR(40), age INT(3) );  テキストエリア内に、右のSQL文⇒ ALTER TABLE user ADD CONSTRAINT PK_user PRIMARY KEY (uid);  を全て貼り付け、「実行する」をクリック Step4.   「SQL は正常に実行されました」が出ればOK AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  24. 24.  2. データベース(mysql)の操作 2-4. 実習環境の準備(3) ◆ 今日使うデータベースとテーブル完成! MySQL データベース:gorinphp0729 テーブル:user テーブル:contest uid 文字型固定4桁 skillname 文字型最大40桁 (参加者ID) (CHAR) (競技名) (VARCHAR) pass 文字型最大10桁 expert 文字型最大40桁 (パスワード) (VARCHAR) (参加者名) (VARCHAR) expert 文字型最大40桁 mail 文字型最大40桁 (参加者名) (VARCHAR) (メールアドレス) (VARCHAR) mail 文字型最大40桁 uid 文字型固定4桁 (メールアドレス) (VARCHAR) (参加者ID) (CHAR) age 整数型最大3桁 (年齢) (INT) userテーブルのuidは「主キー」列(重複値を許さない) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  25. 25.  2. データベース(mysql)の操作 2-5. データの登録(1) ◆ phpMyAdminでINSERT文を確認 phpMyAdminで「挿入」を行い、表示されるSQLを確認。 INSERT INTO `gorinphp0729`.`user` (   `uid` ,   `pass` ,   `expert` ,   `mail` , `age` ) VALUES (   0001, 0001pass, 野比のび太, nobita@example.com, 10 )  ただし、これはとっても丁寧な書き方で・・・ AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  26. 26.  2. データベース(mysql)の操作 2-5. データの登録(2) 実はこれくらいの記述でもOKです。 (人間が作るときはだいたいこんなもんです。) INSERT INTO user (   uid, pass, expert, mail, age ) VALUES (   0001, 0001pass, 野比のび太,nobita@example.com, 10 ) では、INSERT文の構文を確認しましょう。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  27. 27.  2. データベース(mysql)の操作 2-5. データの登録(3) ◆ INSERT文の構文 INSERT  INTO  表名 (       列名1 [, 列名2, 列名3 ・・・ ] ) VALUES (       値1 [, 値2, 値3・・・ ] ) 斜体 ・・・毎回変わる(=考えて入力する)部分。   それ以外の部分はいつも同じ! VALUES句に入れる値は、 文字列型の列だったら (シングルクォーテーション) で囲む。数値型だったらそのまま数字を書く。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  28. 28.  2. データベース(mysql)の操作 2-5. データの登録(4) ◆ INSERT文理解度確認問題 phpMyAdminを操作してSQLを実行し、次のデータを登録する。 そこで使われたINSERT文を確認しよう! user テーブル uid pass expert mail age 0001 0001pass 織田信雄 nobuo@example.com 32 0002 pass0002 野比のび太 nobita@example.com 10 0003 00030003 ジャッキー jackey@example.com 55 contest テーブル skillname expert mail uid 卵焼き 織田信雄 nobuo@example.com 0001 早撃ち 野比のび太 nobita@example.com 0002 スタント ジャッキー jackey@example.com 0003 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  29. 29.  2. データベース(mysql)の操作 2-5. データの登録(5) ◆ INSERT文理解度確認問題 解答 userテーブル INSERT INTO user ( uid, pass, expert, mail, age ) VALUES ( 0001, 0001pass, 織田信雄, nobuo@example.com, 32 ) INSERT INTO user ( uid, pass, expert, mail, age ) VALUES ( 0002, pass0002, 野比のび太, nobita@example.com, 10 ) INSERT INTO user ( uid, pass, expert, mail, age ) VALUES ( 0003, 00030003, ジャッキー, jackey@example.com, 55 ) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  30. 30.  2. データベース(mysql)の操作 2-5. データの登録(6) ◆ INSERT文理解度確認問題 解答 contestテーブル INSERT INTO contest ( skillname, expert, mail, uid ) VALUES ( 卵焼き, 織田信雄, nobuo@example.com, 0001 ) INSERT INTO contest ( skillname, expert, mail, uid ) VALUES ( 早撃ち, 野比のび太, nobita@example.com, 0002 ) INSERT INTO contest ( skillname, expert, mail, uid ) VALUES ( スタント, ジャッキー, jackey@example.com, 0003 ) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  31. 31.  2. データベース(mysql)の操作 2-6. データの検索(1) ◆ phpMyAdminでSELECT文を確認 テーブルを選択すると、SELECT文が表示される。 SELECT * FROM `user` LIMIT 0 , 30 少し省いて、次のように書いても問題ない。 SELECT * FROM user では、SELECT文の構文を確認しよう! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  32. 32.  2. データベース(mysql)の操作 2-6. データの検索(2) ◆ SELECT文の構文 SELECT  列名1[,列名2,・・・] [FROM テーブル名] [WHERE 絞込み条件] SELECT 句に指定できるのは、 ・ *     (アスタリスク。全ての列を表示する) ・列名  (FROM句に指定されたテーブルに存在する列) ・計算式  ( 1+1, 2*2, 3/3, 4-4 ~ など) ・文字列  ( abc, あいう ~ など) ・MySQLの関数  ( now() ~ など) の五つ。 次に、 [WHERE 絞込み条件] についてkwskみてみよう。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  33. 33.  2. データベース(mysql)の操作 2-6. データの検索(3) ◆ WHERE句の使い方 WHERE句は 「行を絞りこむ条件を書く場所」 比較する記号(比較演算子)例 (参考:http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html) 記述例 意味 記述例 意味 a=b a と b が等しい a>b a が b より大きい a != b a と b が等しくない a<b a が b より小さい a <= b a が b 以下 a IS NULL a が 空っぽ(NULL値) a >= b a が b 以上 a IS NOT NULL a が 空っぽじゃない a LIKE 表現 a が 表現に合致する a NOT LIKE 表現 a が 表現に合致しない LIKE演算子の表現について(「_」「%」の使い方) 記号 意味 使用例 意味 _ そこに1文字の 何かがある __ name LIKE a ada name は、1文字目と3文字目に何かの文字があり、 2文字目が「a」、4文字目以降が「ada」である。 (アンダーバー) そこに0文字以上の nameは、「ada」を含む全ての文字列。 % 何かがある name LIKE %ada% ada、Wada、adachi、 Tada、 WadaBen など全てOK。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  34. 34.  2. データベース(mysql)の操作 2-6. データの検索(4) 条件の組み合わせ(AND、OR、()の使い方) 記述例 意味 a = b AND b = c a と b が等しく、かつ b と c が等しい a = b OR b = c a と b が等しいか、または b と c が等しい a = b AND b = c OR a > 5 「aとbが等しく、かつbとcが等しい」か、または「aが5より大きい」 a = b AND (b = c OR a > 5) 「aとbが等しく」、かつ「bとcが等しいか、またはaが5より大きい」 a >= 10 AND a < 100 a が 10以上100未満 a < 10 AND a > 100 a が 10より小さく、かつ100より大きい(ありえない) a + b > 10 OR b < 5 a + b が10より大きいか、または b が5より小さい ( a = 0 OR b = 1 ) OR c = 2 「aが0 または bが1」であるか、または 「cが2」である a = 0 OR ( b = 1 OR c = 2 ) 「aが0」であるか、または「bが1 または cが2」である 「=, !=, <=, >=, <, >, IS NULL, IS NOT NULL, LIKE」 > 「AND」 > 「OR」 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  35. 35.  2. データベース(mysql)の操作 2-6. データの検索(5) ◆ 条件式理解度確認問題 問題 どんな意味?? age > 10 name IS NULL uid = 0001 age < 22 AND gakuseki LIKE 07% gakunen >= 2 OR gakka = AW どう書く? 意味 age が 18以上、65未満である name が 「T」 で始まり「a」で終わる gakunen が 1 であるか、または gakka が「JO」である gakuseki が 「09JZ」で始まり、かつ bukatsu が空っぽである gakka が 「J」から始まる2文字で、age が 20 以下である AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  36. 36.  2. データベース(mysql)の操作 2-6. データの検索(6) ◆ 条件式理解度確認問題 解答 問題 どんな意味?? age > 10 age が 10 より大きい name IS NULL name が空っぽである uid = 0001 uid が 「0001」である age < 22 AND gakuseki LIKE 07% age が 22より小さく、かつ gakuseki が「07」から始まる gakunen >= 2 OR gakka = AW gakunen が 2以上であるか、または gakka が「AW」である どう書く? 意味 age >= 18 AND age < 65 age が 18以上、65未満である name LIKE T%a name が 「T」 で始まり「a」で終わる gakunen = 1 OR gakka = JO gakunen が 1 であるか、または gakka が「JO」である gakuseki LIKE 09JZ% AND gakuseki が 「09JZ」で始まり、かつ bukatsu が空っぽである bukatsu IS NULL gakka LIKE J_ AND age <= 20 gakka が 「J」から始まる2文字で、age が 20 以下である AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  37. 37.  2. データベース(mysql)の操作 2-6. データの検索(7) ◆ SELECT文理解度確認問題 user テーブル uid pass expert mail age 0001 0001pass 織田信雄 nobuo@example.com 32 0002 pass0002 野比のび太 nobita@example.com 10 0003 00030003 ジャッキー jackey@example.com 55 この user テーブルから、次の内容を表示する SELECT文を書き、phpMyAdminで実行しよう。 1) age が 30 以上の行のuid, expert を表示する 2) mail が「no」から始まる行のpass を表示する 3) expert がジャッキーであるか、または    mail に 「ta」を含む行の全ての列を表示する AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  38. 38.  2. データベース(mysql)の操作 2-6. データの検索(8) ◆ SELECT文理解度確認問題 解答 1) age が 30 以上の行のuid, expert を表示する SELECT uid, expert FROM user WHERE age >= 30 2) mail が noから始まる行のpass を表示する SELECT pass FROM user WHERE mail LIKE no% 3) expert がジャッキーであるか、または    mail に 「ta」を含む行の全ての列を表示する SELECT * FROM user WHERE mail LIKE %ta% OR expert = ジャッキー AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  39. 39.  2. データベース(mysql)の操作 2-7. データの更新(1) ◆ phpMyAdminでUPDATE文を確認 phpMyAdminで「編集」を実行すると、 UPDATE文が表示されます UPDATE `gorinphp0729`.`user` SET `expert` = 野比のびすけ WHERE `user`.`uid` = 0001 LIMIT 1 少し省いて、次のように書いても問題ありません。 UPDATE user SET expert = 野比のびすけ WHERE uid = 0001 では、UPDATE文の構文を確認してみましょう。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  40. 40.  2. データベース(mysql)の操作 2-7. データの更新(2) ◆ UPDATE文の構文 UPDATE  表名 SET 列名1 = 値1 [, 列名2 = 値2・・・] [WHERE 絞込み条件] ・WHERE句の使い方はSELECT文とまったく同じ。 ・列名は、更新対象の表に存在する列名。 ・WHERE句を指定しないと、表にある全ての行を  更新してしまう。気をつけて! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  41. 41.  2. データベース(mysql)の操作 2-7. データの更新(3) ◆ UPDATE文理解度確認問題 contest テーブル skillname expert mail uid 卵焼き 織田信雄 nobuo@example.com 0001 早撃ち 野比のび太 nobita@example.com 0002 スタント ジャッキー jackey@example.com 0003 phpMyAdminからUPDATE文を実行し、 この contest テーブルを更新しよう。 1) uid が 「0001」の行の skillname を    「目玉焼き」に変更する 2) mail に「i」を含む行のexpertを    「野比のびすけ」に変更する 3) uid が 「0002」か、または「0003」の行の    skillname を「早食い」に変更する AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  42. 42.  2. データベース(mysql)の操作 2-7. データの更新(4) ◆ UPDATE文理解度確認問題 解答 1) uid が 「0001」の行の skillname を「目玉焼き」に変更する UPDATE contest SET skillname = 目玉焼き WHERE uid = 0001 2) mail に「i」を含む行のexpertを「野比のびすけ」に変更する UPDATE contest SET expert = 野比のびすけ WHERE mail LIKE %i% 3) uid が 「0002」か、または「0003」の行の    skillname を「早食い」に変更する UPDATE contest SET skillname = 早食い WHERE uid = 0002 OR uid = 0003 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  43. 43.  2. データベース(mysql)の操作 2-8. データの削除(1) ◆ phpMyAdminで文を確認 phpMyAdminでDELETE文を確認 DELETE FROM `user` WHERE CONVERT(`user`.`uid` USING utf8) = 0001 LIMIT 1 これを簡単な書き方に直すと DELETE FROM user WHERE uid = 0001 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  44. 44.  2. データベース(mysql)の操作 2-8. データの削除(2) ◆ DELETE文の構文 DELETE FROM  表名 [WHERE 絞込み条件] ・WHERE句の使い方はSELECT文とまったく同じ。 ・WHERE句を指定しないと、表にある全ての行を  削除してしまう。気をつけて! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  45. 45.  2. データベース(mysql)の操作 2-8. データの削除(3) ◆ DELETE文理解度確認問題 user テーブル uid pass expert mail age 0001 0001pass 織田信雄 nobuo@example.com 32 0002 pass0002 野比のび太 nobita@example.com 10 0003 00030003 ジャッキー jackey@example.com 55 phpMyAdminからDELETE文を実行し、この user テーブルから 行を削除しよう。ただし、条件に合致する行がない場合もある。 1) uidが「0003」で、かつage が40以下の行を削除 2) pass が 「s」で終る行を削除 3) uidが「0003」であるか、またはageが40以上の行を削除 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  46. 46.  2. データベース(mysql)の操作 2-8. データの削除(4) ◆ DELETE文理解度確認問題 解答 1) uidが「0003」で、かつage が40以下の行を削除 DELETE FROM user WHERE uid = 0003 AND age <= 40 2) pass が 「s」で終る行を削除 DELETE FROM user WHERE pass LIKE %s 3) uidが「0003」であるか、またはageが40以上の行を削除 DELETE FROM user WHERE uid = 0003 OR age >= 40 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  47. 47.  2. データベース(mysql)の操作 2-9. ここまでのまとめ ここまでで   データの登録(INSERT文) データの検索(SELECT文) データの更新(UPDATE文) データの削除(DELETE文) を見てきた。また、   phpMyAdminで、正しい(機械的な)SQL文を確認できる   ということも分かった。では最後に、 phpのプログラムでSQLを実行する方法を 確認していこう! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  48. 48.  2. データベース(mysql)の操作 2-10. PHP de SQL PHPでMySQLを扱う際には、 どのような操作であっても次の手順で処理をする。 1)DBに接続 2)SQLを実行 3)接続を切断 また、 2)SQLを実行 のとき、そのSQLが SELECT・INSERT・UPDATE・DELETEの どれであっても、基本的に同じ一つの方法で 実行できる。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  49. 49.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-11. DBに接続・切断する(1) ◆ phpからDBに接続してみよう sample2_11_1.php <?php $host = "localhost"; // 接続先のマシンを指定 $user = "root"; // 接続するMySQLのユーザを指定 $pass = ""; // MySQLユーザのパスワードを指定 $db = "gorinphp0729"; // MySQL内のデータベースを指定 // MySQLに接続を試みる $conn = mysqli_connect($host, $user, $pass, $db); if ($conn) { // 接続できたか判定 print "接続OK!(゚Д゚)"; mysqli_close($conn); // 接続を切断 } else { print "接続NG!orz"; } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  50. 50.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-11. DBに接続・切断する(2) ◆ 接続の瞬間とその結果 // MySQLに接続を試みる $conn = mysqli_connect($host, $user, $pass, $db); mysqli_connect($host, $user, $pass, $db) の結果を、 変数 $conn に代入。 $conn の中身は・・・ 接続を 変数 $conn 試みた結果 「MySQLへの接続そのもの※」が代入されている。 成功! ^ 。^ php コレ MySQL 失敗・・・ false が代入されている。 ※「MySQLへの接続そのもの」のことを、   接続オブジェクト とか コネクションオブジェクト と呼ぶ AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  51. 51.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-11. DBに接続・切断する(3) ◆ 接続の成否を判定 変数 $conn には、mysqli_queryによって 「MySQLへの接続そのもの」 または 「false」 のどちらかが入っている。 if ($conn) {   // 接続できたか判定 print "接続OK!(゚Д゚)"; mysqli_close($conn); // 接続を切断 } else { print "接続NG!orz"; } 「false か 0 か null」以外は全て「true」として扱われるため、 接続に成功して「MySQLへの接続そのもの」が入っている $conn は true と判定される! そして切断↓ mysqli_close($conn); // 接続を切断 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  52. 52.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-12. SQL実行の基本的な流れ ◆ 文字セット設定→SQL作成→mysqli_query実行 sample2_12_1.php <?php $host = "localhost"; $user = "root"; $pass = ""; $db = "gorinphp0729"; $conn = mysqli_connect($host, $user, $pass, $db); if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); // 文字セット設定 $sql = "SELECT now()"; // SQL作成 $result = mysqli_query($conn, $sql); // $conn と $sql を指定し、mysqli_query! if ($result) { // SQL実行が成功したかどうかを判定 print "実行成功!(゚Д゚)"; } else { print "実行失敗・・・orz"; } mysqli_close($conn); } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  53. 53.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-13. 文字セット設定(1) ◆ MySQLの文字化け対策 phpを使ってSQL文を実行すると、日本語などのマルチバイト文字が 文字化けを起こしたり、WHERE句条件で正しく判定されなかったりする。 対策として、DBへの接続をした後に mysqli_query(接続オブジェクト, "SET NAMES 文字セット名"); と書いておくと、日本語を扱うときも正しくSQL文が処理される。 文字セット名は、phpMyAdminのデータベース情報ページで確認できる。 「照合順序」の、最初の「 _ 」の前までが文字セット名 (この場合eucjpms) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  54. 54.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-13. 文字セット設定(2) 例)文字セット eucjpms のDBでUPDATE文を実行する場合sample2_13_1.php <?php $host = "localhost"; $user = "root"; $pass = ""; サンプルコードの、 $db = "gorinphp0729"; $conn = mysqli_connect($host, $user, $pass, $db); 文字セットを設定している行を コメントアウト( // )すると、 if ($conn) { 値が正しくUPDATEされない mysqli_query($conn, "SET NAMES eucjpms"); $sql = "UPDATE contest SET expert = アホ"; ことを確かめてみよう。 $result = mysqli_query($conn, $sql); mysqli_close($conn); } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  55. 55.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-13. 文字セット設定(3) ◆ eucjpms以外の文字セットの例 ⇒ mysqli_query(接続オブジェクト, "SET NAMES sjis"); ⇒ mysqli_query(接続オブジェクト, "SET NAMES utf8"); その他、php<->MySQL間以外にもphp<->Apache間や Apache<->ブラウザ間の文字化け対策については、 第二回セミナーで詳しく取り扱う予定! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  56. 56.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(1) ◆ mysqli_query メソッド の使い方 mysqli_query の使い方は、次のとおり $result = mysqli_query(接続オブジェクト, SQL文); 実行するSQL文の種類によって(SELECT文かどうかで)、 変数$resultに入る実行結果が若干ちがう 実行した 変数 $result SQL文 「MySQLから取得したデータのかたまり」が代入される。失敗したらfalse。 fakj ふぇ えd 1 1 321 SELECT 213 321 1 321 213 321 321 1 1 213 321 1 ^ 。^ 321 321 321 php 1 321 1 $result データのかたまり 321 1 1 MySQL INSERT UPDATE 成功したら true、失敗したら false が代入される。 DELETE など 「データのかたまり」の使い方は?? AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  57. 57.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(2) ◆ THE "データのかたまり" 「結果セット」 $result = mysqli_query(接続オブジェクト, SELECT文); fakj ふぇ えd 1 1 321 213 321 1 321 213 321 321 1 1 213 321 1 ^ 。^ 321 321 321 php 1 321 1 $result データのかたまり 321 1 1 MySQL このかたまりを、「結果セット」と呼ぶ。結果セットから データを取り出すにはmysqli_fetch_array メソッドを使う。 $row = mysqli_fetch_array(結果セット); これで、SELECT文を実行して得られた結果を 先頭の1行だけ取り出し、配列として変数$row に代入。 $row[添え字] で、その1行の好きな列の値を得られる。 添え字は、数字(0列目から)か"列名"が使える。 実行するたびに、次の行、次の行と進んでいく。 もう取り出せる行がない場合、$rowにNULL が入る。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  58. 58.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(3) ◆ mysqli_fetch_arrayの動作確認 そのいちsample2_14_1.php <?php (1) $host = "localhost"; $user = "root"; 接続オブジェクト$connとSQL文$sqlを $pass = ""; $db = "gorinphp0729"; 使って、mysqli_queryでSQLを実行。 結果セットを$resultに代入。 $conn = mysqli_connect($host, $user, $pass, $db); if ($conn) { (2) mysqli_query($conn, "SET NAMES eucjpms"); 結果セット$resultを判定し、SQLの実行が $sql = "SELECT uid, mail FROM contest"; 成功していれば if 文の中に入る。 $result = mysqli_query($conn, $sql); // (1) if ($result) { // (2) (3) $row = mysqli_fetch_array($result); // (3) print $row[0] . ", "; // (4) 結果セット$resultから、mysqli_fetch_array で先頭の一行を取り出し、配列として print $row[1] . ", "; $rowに代入。 print $row["uid"] . ", "; print $row["mail"] . "<br>rn"; (4) 配列 $rowの 各値(= 1行の中にある、各列 } の値)をprint文で出力している。 mysqli_close($conn); $row[]の添え字は、数値でも列名でもOK。 } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  59. 59.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(4) ◆ mysqli_fetch_arrayの動作確認 そのにsample2_14_2.php <?php (1) $host = "localhost"; $user = "root"; mysqli_fetch_arrayで、ちゃんと行が $pass = ""; $db = "gorinphp0729"; 取り出されて、$rowに入っていることを $conn = mysqli_connect($host, $user, $pass, $db); 判定 if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); $sql = "SELECT uid, mail FROM contest"; $result = mysqli_query($conn, $sql); if ($result) { $row = mysqli_fetch_array($result); if ($row) { // (1) print $row[0] . ", "; print $row[1] . ", "; print $row["uid"] . ", "; print $row["mail"] . "<br>rn"; } } mysqli_close($conn); } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  60. 60.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(5) ◆ mysqli_fetch_arrayの動作確認 そのさんsample2_14_3.php <?php (1) $host = "localhost"; $user = "root"; mysqli_fetch_arrayを2回実行し、 $pass = ""; $db = "gorinphp0729"; 1行読み進めている。 $conn = mysqli_connect($host, $user, $pass, $db); if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); $sql = "SELECT uid, mail FROM contest"; $result = mysqli_query($conn, $sql); if ($result) { $row = mysqli_fetch_array($result); $row = mysqli_fetch_array($result); // (1) if ($row) { print $row[0] . ", " . $row[1] . ", "; print $row["uid"] . ", " . $row["mail"]; print "<br>rn"; } } mysqli_close($conn); } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  61. 61.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-14. SQL実行と結果セット(6) ◆ mysqli_fetch_arrayの動作確認 そのよんsample2_14_4.php <?php (1) $host = "localhost"; $user = "root"; 「mysqli_fetch_array($result) の結果が $pass = ""; $db = "gorinphp0729";  nullでない間繰り返す」 $conn = mysqli_connect($host, $user, $pass, $db); という継続条件の、for 文のループ。 if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); つまり、SELECT文で取得した $sql = "SELECT uid, mail FROM contest"; 全ての行について、内容を表示する $result = mysqli_query($conn, $sql); ことを繰り返すプログラム。 if ($result) { $row = mysqli_fetch_array($result); (たぶん、そういうことをやるときは for ($i = 0; $row != null; $i++) { // (1) ホントはforじゃなくてwhileというループを 使うことが多いです。) print "{$i}行目 => "; while ($row=mysqli_fetch_array($result)){ print $row[0] . ", " . $row[1] . ", "; print ~~~ print $row["uid"] . ", " . $row["mail"]; } print "<br>rn"; $row = mysqli_fetch_array($result); } } mysqli_close($conn); } ?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  62. 62.  2. データベース(mysql)の操作 2-15. 演習問題をやってみよう(1) ◆ 演習問題の環境整理 まず、問題を解くために /* DBを選択 */ USE gorinphp0729; データベースの中身を整理します。 /* 既存のデータを削除 */ DELETE FROM user; (下の二つのテーブルがある DELETE FROM contest; /* 問題用のデータを挿入 */  状態にします) INSERT INTO user (uid, pass, expert, mail, age) VALUES (0001, 0001pass, 織田信雄, nobuo@example.com, 32); INSERT INTO user (uid, pass, expert, mail, age) VALUES (0002, pass0001, 野比のび太, nobita@example.com, 10); INSERT INTO user (uid, pass, expert, mail, age) VALUES (0003, 00030003, ジャッキー, jackey@example.com, 55); phpMyAdminから、右のSQLを全て INSERT INTO contest (skillname, expert, mail, uid) VALUES (卵焼き, 織田信雄, nobuo@example.com, 0001); INSERT INTO contest (skillname, expert, mail, uid) VALUES (早撃ち, 野比のび太, nobita@example.com, 0002); 入力し、実行してください。 INSERT INTO contest (skillname, expert, mail, uid) VALUES (スタント, ジャッキー, jackey@example.com, 0003); user テーブル uid pass expert mail age 0001 0001pass 織田信雄 nobuo@example.com 32 0002 pass0002 野比のび太 nobita@example.com 10 0003 00030003 ジャッキー jackey@example.com 55 contest テーブル skillname expert mail uid 卵焼き 織田信雄 nobuo@example.com 0001 早撃ち 野比のび太 nobita@example.com 0002 スタント ジャッキー jackey@example.com 0003 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  63. 63.  2. データベース(mysql)の操作 2-15. 演習問題をやってみよう(2) ex2_15_1.php user テーブルから全てのデータを取得し、その結果セットから 先頭の一行を取り出し、その行の一列目の値を表示してください。 ex2_15_2.php データベースの接続パスワードにわざと誤った文字列を指定し、 if 文を使って接続が失敗することを確認してください。 ex2_15_3.php user テーブルから、「ageが30以上」または「mailが j から始まる」 行のuidを取得し、その結果セットから二回行を抜き出し、二回目に 取り出した行の uid を表示してください。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  64. 64.  2. データベース(mysql)の操作 2-15. 演習問題をやってみよう(3) ex2_15_4.php contest テーブルの、uidが 0001 である行の skillname を、 「焼そば」に変更してください。 ex2_15_5.php user テーブルに、次の新規データを登録してください。 uid:「0004」  pass:「pwd」  expert:「ポチ」 mail:「pochi@example.com」  age:「7」 ex2_15_6.php contest テーブルの全ての行を削除し、その処理が成功した場合のみ、 続いてuser テーブルの「pass列に p を含む行」を削除してください。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  65. 65.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(1)ex2_15_1.phpuser テーブルから全てのデータを取得し、その結果セットから先頭の一行を取り出し、その行の一列目の値を表示してください。<?php <!-- 以下、補足説明$host = "localhost"; 変数 $sql にSQLを作って代入していく箇所は、$user = "root"; SQLを作るときによく使われる書き方。$pass = "";$db = "gorinphp0729"; 例えば、exampleテーブルから col1~col4、col6~col9をSELECTするとき、$conn = mysqli_connect($host, $user, $pass, $db); $sql = "SELECT col1, col2, col3, col4, col6, col7, col8, col9if ($conn) { FROM example"; mysqli_query($conn, "SET NAMES eucjpms"); と書くよりも $sql = ""; // ↓以下、$sqlの中身 $sql = ""; // 変数の初期化 $sql .= " " . "SELECT"; // SELECT $sql .= " " . "SELECT"; $sql .= " " . " *"; // SELECT * $sql .= " " . " col1,"; $sql .= " " . "FROM"; // SELECT * FROM $sql .= " " . " col2,"; $sql .= " " . " col3,"; $sql .= " " . " user"; // SELECT * FROM user $sql .= " " . " col4,"; $sql .= " " . " col6,"; $result = mysqli_query($conn, $sql); $sql .= " " . " col7,"; $row = mysqli_fetch_array($result); $sql .= " " . " col8,"; $sql .= " " . " col9"; $sql .= " " . "FROM"; print $row[0]; $sql .= " " . " example"; mysqli_close($conn); と書いたほうが見やすく、編集しやすい。}?> --> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  66. 66.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(2)ex2_15_2.phpデータベースの接続パスワードにわざと誤った文字列を指定し、if 文を使って接続が失敗することを確認してください。<?php$host = "localhost";$user = "root";$pass = "(゚∀゚)アヒャヒャ!!"; // 間違ったパス$db = "gorinphp0729";$conn = mysqli_connect($host, $user, $pass, $db);if ($conn) { print "接続成功しちゃった?(^^;"; mysqli_close($conn);} else { print "はい失敗";}?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  67. 67.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(3)ex2_15_3.phpuser テーブルから、「ageが30以上」または「mailが j から始まる」行のuidを取得し、その結果セットから二回行を抜き出し、二回目に取り出した行の uid を表示してください。<?php print $row["uid"];$host = "localhost";$user = "root"; mysqli_close($conn);$pass = "";$db = "gorinphp0729"; }$conn = mysqli_connect($host, $user, $pass, $db); ?>if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); $sql = ""; $sql .= " " . "SELECT"; $sql .= " " . " uid"; $sql .= " " . "FROM"; $sql .= " " . " user"; $sql .= " " . "WHERE"; $sql .= " " . " age >= 30"; $sql .= " " . "OR"; $sql .= " " . " mail LIKE j%"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_array($result); $row = mysqli_fetch_array($result); AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  68. 68.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(4)ex2_15_4.phpcontest テーブルの、uidが 0001 である行の skillname を、「焼そば」に変更してください。<?php$host = "localhost";$user = "root";$pass = "";$db = "gorinphp0729";$conn = mysqli_connect($host, $user, $pass, $db);if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); $sql = ""; $sql .= " " . "UPDATE"; $sql .= " " . " contest"; $sql .= " " . "SET"; $sql .= " " . " skillname = 焼そば"; $sql .= " " . "WHERE"; $sql .= " " . " uid = 0001"; $result = mysqli_query($conn, $sql); if ($result) { print "更新成功!"; } mysqli_close($conn);}?> AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  69. 69.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(5)ex2_15_5.phpuser テーブルに、次の新規データを登録してください。uid:「0004」  pass:「pwd」  expert:「ポチ」 mail:「pochi@example.com」  age:「7」<?php mysqli_close($conn);$host = "localhost"; }$user = "root"; ?>$pass = "";$db = "gorinphp0729";$conn = mysqli_connect($host, $user, $pass, $db);if ($conn) { mysqli_query($conn, "SET NAMES eucjpms"); $sql = ""; $sql .= " " . "INSERT INTO user ("; $sql .= " " . " uid, pass, expert, mail, age"; $sql .= " " . ")VALUES("; $sql .= " " . " 0004,"; $sql .= " " . " pwd,"; $sql .= " " . " ポチ,"; $sql .= " " . " pochi@example.com,"; $sql .= " " . " 7"; $sql .= " " . ")"; $result = mysqli_query($conn, $sql); if ($result) { print "更新成功!"; } AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  70. 70.  2. データベース(mysql)の操作 2-16. 演習問題こたえあわせ(6)ex2_15_6.phpcontest テーブルの全ての行を削除し、その処理が成功した場合のみ、続いて user テーブルの「pass列に p を含む行」を削除してください。<?php $result = mysqli_query($conn, $sql);$host = "localhost"; if ($result) {$user = "root";$pass = ""; print "user テーブル成功!<br>rn";$db = "gorinphp0729";$conn = mysqli_connect($host, $user, $pass, $db); } else {if ($conn) { print "user テーブル処理失敗orz<br>rn"; mysqli_query($conn, "SET NAMES eucjpms"); } $sql = "DELETE FROM contest"; } else { $result = mysqli_query($conn, $sql); print "contest テーブル処理失敗orz<br>rn"; if ($result) { } print "contest テーブル成功!<br>rn"; mysqli_close($conn); $sql = ""; } $sql .= " " . "DELETE FROM user"; $sql .= " " . "WHERE"; ?> $sql .= " " . " pass LIKE %p%"; AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  71. 71.  2. データベース(mysql)の操作 1)DBに接続 2)SQLを実行 3)接続を切断 2-17. データベースの操作 まとめ◆DBに接続 $conn = mysqli_connect("サーバアドレス","ユーザ名","パスワード","DB名");  →接続に成功すれば、$conn には「MySQLへの接続そのもの(接続オブジェクト)」が、    失敗すれば false が入る。  → if ($conn) { … で、正しく接続できたことを確認してから、続きの処理を行う。◆SQLを実行 mysqli_query(接続オブジェクト, "SET NAMES 文字セット名"); // 文字セット設定 →文字セット名は、phpMyAdminのデータベース情報「照合順序」で確認。 $result = mysqli_query(接続オブジェクト, "SQL文");      // SQL文の実行  →$resultには、SQL文がSELECT文ならば「結果セット」かfalseが、    SELECT文以外ならば true か false が入る。 $row = mysqli_fetch_array($result); // 結果セットを1行読む  →SELECT文実行後の結果セットから、1行ずつ取り出して、配列として$rowに入れる。    $row[列番号] または $row["列名"] で、取り出した行にある好きな列の値が得られる。  →もう読む行が残っていない場合は、$row に NULL がはいる。◆接続を切断 $mysqli_close(接続オブジェクト); AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 

×