SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
 AW技能五輪 第一回 PHPセミナー 資料



   技能五輪
   若年者ものづくり競技大会
   出場者向け
   第一回 PHPセミナー 資料
     講師  : 塚田 朗弘
     資料作成: 電設部技能五輪プロジェクト
     サポート: 電設部技能五輪プロジェクト
     初版  : 2009年07月29日
     第四版 : 2009年08月05日

          AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 講師紹介

  名前      : 塚田 朗弘(つかだ あきひろ) 
   
  学科      : 高度情報処理科(07JZ)

  所属      : 電設部(IT勉強会PJTリーダ)

  ID   : atcorp(はてな・ついったー)
   
  その他 : http://tinyurl.com/atcorp-at-it
          ↑いますぐクリック!


             AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 も く じ

1.配列の操作                           2.データベース(mysql)の操作
1-1.   "配列"ってなんだろう            5    2-1. データベースって何だろう                  17
1-2.   "配列"をイメージしよう           6    2-2. データベースをイメージしよう                18
1-3.   こんなときによく使う             9    2-3. 対五輪必須DBテクニック                  21
1-4.   演習課題をやってみよう           10    2-4. 実習環境の準備                       22
1-5.   演習課題こたえあわせ            11    2-5. データの登録                        25
1-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. 
 1. 配列の操作




        第一部
       配列の操作


            AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 1. 配列の操作
 1-1. "配列"って何だろう

 ◆配列は、変数(頭に$がつくもの)の仲間。
  変数と配列の違いは・・・
  
  ・変数は
     一つの変数の中で一つの値
  
  ・配列は
     一つの配列の中で複数の値
  
                     を扱う!
            AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 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. 
 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. 
 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. 
 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. 
 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. 
 1. 配列の操作
 1-5. 演習課題こたえあわせ

 ex1_4_1.php                    ex1_4_2.php




               AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 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. 
 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. 
 1. 配列の操作
 1-6. 配列の操作 まとめ

◆配列一個で、複数の値を扱える!
  →変数は「ハコ」、
     配列は「区切られたハコ」


◆添え字は数字でも文字列でもOK!
  →文字列の添え字 = 連想配列


◆例えばこんなときに使います。
  →データベースから取得したデータに、
    片っ端からアクセスして表示したり
     計算したりするとき!

            AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 1. 配列の操作



         第一部
        配列の操作

                        完
            AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 2. データベース(mysql)の操作



         第二部
       データベース
        (MySQL)
         の操作
           AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 2. データベース(mysql)の操作
 2-1. データベースって何だろう
 ◆ 「膨大なデータを素早く安全に扱うソフト」
  1)RDB(リレーショナルデータベース)が主流。
    2次元の表形式でデータを扱う。
  2)膨大なデータ量と高速なパフォーマンス。
    エクセルでは、せいぜい1000件のデータ内を検索すれば
    「フリーズ→落ちる→データ消える→泣く」ことになる。
    DBでは、数千万件のデータを安定して扱い、且つ高速に
    検索・更新・登録・削除することができる。
  3)データの損失、不正アクセス、漏洩を防ぐ。
    同時アクセスの制御、バックアップとリカバリ機能、
    細かく設定できる権限制御などにより、安全にデータを
    管理してくれる。

           AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 2. データベース(mysql)の操作
 2-8. データの削除(2)
 ◆ DELETE文の構文


   DELETE FROM  表名
   [WHERE 絞込み条件]


    ・WHERE句の使い方はSELECT文とまったく同じ。
    ・WHERE句を指定しないと、表にある全ての行を
     削除してしまう。気をつけて!




            AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 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. 
 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. 
 2. データベース(mysql)の操作
 2-9. ここまでのまとめ

 ここまでで
  
  データの登録(INSERT文)
  データの検索(SELECT文)
  データの更新(UPDATE文)
  データの削除(DELETE文)

 を見てきた。また、
  
   phpMyAdminで、正しい(機械的な)SQL文を確認できる
  
 ということも分かった。では最後に、
 phpのプログラムでSQLを実行する方法を
 確認していこう!
           AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 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. 
 2. データベース(mysql)の操作
 2-16. 演習問題こたえあわせ(1)
ex2_15_1.php
user テーブルから全てのデータを取得し、その結果セットから先頭の一行を取り出し、
その行の一列目の値を表示してください。
<?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, col9
if ($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. 
 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. 
 2. データベース(mysql)の操作
 2-16. 演習問題こたえあわせ(3)
ex2_15_3.php
user テーブルから、「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. 
 2. データベース(mysql)の操作
 2-16. 演習問題こたえあわせ(4)
ex2_15_4.php
contest テーブルの、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. 
 2. データベース(mysql)の操作
 2-16. 演習問題こたえあわせ(5)
ex2_15_5.php
user テーブルに、次の新規データを登録してください。
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. 
 2. データベース(mysql)の操作
 2-16. 演習問題こたえあわせ(6)
ex2_15_6.php
contest テーブルの全ての行を削除し、その処理が成功した場合のみ、続いて 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. 
 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. 
 2. データベース(mysql)の操作
 2-18. おわりに
 ◆ 技能五輪金メダルを目指すAWの皆様へ
   この第一回セミナーで取り上げたことは、
   実践的ではありますが最低限の内容とも言えます。
   (先輩はこのくらいのことをやっていました)

   SQLやphpには、DBを操作するためのもっと
   便利な使い方もたくさんあります。
   (たとえば、「登録年月日が一番古い」という条件を書く、
    DB処理中にエラーが発生したら更新を元に戻す、などなど)

   「こんなことできないのかなぁ?」「この辺もっとkwsk」
   ということがあったら、あきらめる前にググるか、
   電設部 技能五輪PJTまでお気軽にご質問ください。


   大丈夫、大体のことはできますよ!                                    (たぶんね)

           AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
 AW技能五輪 第一回 PHPセミナー 資料




      長時間お疲れさまでした!




          AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 

Contenu connexe

Tendances

XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」takepu
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2Masatoshi Tada
 
Java8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみるJava8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみるShinya Mochida
 
葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by Keras葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by KerasYuji Kawakami
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
Jupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJun-ya Norimatsu
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeMasahiro Tanaka
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPIAkihiro Ikezoe
 
201209 Biopackathon 12th
201209 Biopackathon 12th201209 Biopackathon 12th
201209 Biopackathon 12thSatoshi Kume
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」fukuoka.ex
 
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介Hiroshi Tokumaru
 

Tendances (20)

XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
ステップ・バイ・ステップで学ぶラムダ式・Stream api入門 #jjug ccc #ccc h2
 
Java8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみるJava8のstreamをダラダラまとめてみる
Java8のstreamをダラダラまとめてみる
 
葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by Keras葉物野菜を見極めたい!by Keras
葉物野菜を見極めたい!by Keras
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
Jupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep Learning
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
 
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
 
Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI社内Java8勉強会 ラムダ式とストリームAPI
社内Java8勉強会 ラムダ式とストリームAPI
 
201209 Biopackathon 12th
201209 Biopackathon 12th201209 Biopackathon 12th
201209 Biopackathon 12th
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
 
Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介Rails SQL Injection Examplesの紹介
Rails SQL Injection Examplesの紹介
 

En vedette

Glt tobetobe dev_love20101106_noralt
Glt tobetobe dev_love20101106_noraltGlt tobetobe dev_love20101106_noralt
Glt tobetobe dev_love20101106_noraltakitsukada
 
[张爱玲]半生缘
[张爱玲]半生缘[张爱玲]半生缘
[张爱玲]半生缘guest1e8dd4
 
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングakitsukada
 
Glt tobetobe dev_love20101106
Glt tobetobe dev_love20101106Glt tobetobe dev_love20101106
Glt tobetobe dev_love20101106akitsukada
 
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜akitsukada
 

En vedette (12)

American Flag by Hanna
American Flag by HannaAmerican Flag by Hanna
American Flag by Hanna
 
Glt tobetobe dev_love20101106_noralt
Glt tobetobe dev_love20101106_noraltGlt tobetobe dev_love20101106_noralt
Glt tobetobe dev_love20101106_noralt
 
[张爱玲]半生缘
[张爱玲]半生缘[张爱玲]半生缘
[张爱玲]半生缘
 
Ashley
AshleyAshley
Ashley
 
データベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニングデータベース・リファクタリング読書会第四回オープニング
データベース・リファクタリング読書会第四回オープニング
 
Gorinphp0928
Gorinphp0928Gorinphp0928
Gorinphp0928
 
Glt100527
Glt100527Glt100527
Glt100527
 
Glt tobetobe dev_love20101106
Glt tobetobe dev_love20101106Glt tobetobe dev_love20101106
Glt tobetobe dev_love20101106
 
Clarito
ClaritoClarito
Clarito
 
Heat recovery
Heat recoveryHeat recovery
Heat recovery
 
Madeline
MadelineMadeline
Madeline
 
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
みゆっき☆Think#10 チーム開発〜脱ぼっちマインド〜
 

Similaire à Gorinphp0729

知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸Takahiro Iwase
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回Shigeharu Yamaoka
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京tuchimur
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々Toshi Harada
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -chibochibo
 

Similaire à Gorinphp0729 (20)

知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
hscj2019_ishizaki_public
hscj2019_ishizaki_publichscj2019_ishizaki_public
hscj2019_ishizaki_public
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々無駄にNeo4jを使っている日々
無駄にNeo4jを使っている日々
 
Wtm
WtmWtm
Wtm
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 

Plus de akitsukada

Solutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for EngineersSolutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for Engineersakitsukada
 
Morning Session - AWS Serverless Ways
Morning Session - AWS Serverless WaysMorning Session - AWS Serverless Ways
Morning Session - AWS Serverless Waysakitsukada
 
AWS Introduction for Startups
AWS Introduction for StartupsAWS Introduction for Startups
AWS Introduction for Startupsakitsukada
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422akitsukada
 
Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016akitsukada
 
AWS Mobile Maniacs
AWS Mobile ManiacsAWS Mobile Maniacs
AWS Mobile Maniacsakitsukada
 
My Startup Learnings (短縮版)
My Startup Learnings (短縮版)My Startup Learnings (短縮版)
My Startup Learnings (短縮版)akitsukada
 
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"akitsukada
 
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"akitsukada
 
AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)akitsukada
 
Awsjpcasestudies
AwsjpcasestudiesAwsjpcasestudies
Awsjpcasestudiesakitsukada
 
Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線akitsukada
 
Auto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカットAuto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカットakitsukada
 
20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetupakitsukada
 
Little tips ios
Little tips iosLittle tips ios
Little tips iosakitsukada
 
Find(ラスト)
Find(ラスト)Find(ラスト)
Find(ラスト)akitsukada
 
20100717tobesetu
20100717tobesetu20100717tobesetu
20100717tobesetuakitsukada
 

Plus de akitsukada (20)

Solutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for EngineersSolutions Architect, Exciting Career for Engineers
Solutions Architect, Exciting Career for Engineers
 
Morning Session - AWS Serverless Ways
Morning Session - AWS Serverless WaysMorning Session - AWS Serverless Ways
Morning Session - AWS Serverless Ways
 
AWS Introduction for Startups
AWS Introduction for StartupsAWS Introduction for Startups
AWS Introduction for Startups
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422
 
Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016Amazon Cognito Deep Dive @ JAWS DAYS 2016
Amazon Cognito Deep Dive @ JAWS DAYS 2016
 
AWS Mobile Maniacs
AWS Mobile ManiacsAWS Mobile Maniacs
AWS Mobile Maniacs
 
My Startup Learnings (短縮版)
My Startup Learnings (短縮版)My Startup Learnings (短縮版)
My Startup Learnings (短縮版)
 
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
CTO Night & Day Morning Session "スタートアップCTOならおさえておきたいAWS基本構成"
 
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
CTO Night & Day Morning Session "Auto Scaling & Spot Instances Deep Dive"
 
AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)AWS for Startups 2016 (2015/12/02版)
AWS for Startups 2016 (2015/12/02版)
 
Awsjpcasestudies
AwsjpcasestudiesAwsjpcasestudies
Awsjpcasestudies
 
Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線Mobile Hubで変わる、アプリ開発最前線
Mobile Hubで変わる、アプリ開発最前線
 
Auto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカットAuto Scaling x Spot Instances によるスケーラビリティと コストカット
Auto Scaling x Spot Instances によるスケーラビリティと コストカット
 
20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup20140807 AWS Startup Tech Meetup
20140807 AWS Startup Tech Meetup
 
Little tips ios
Little tips iosLittle tips ios
Little tips ios
 
Printf
PrintfPrintf
Printf
 
With git
With gitWith git
With git
 
Find(ラスト)
Find(ラスト)Find(ラスト)
Find(ラスト)
 
Find(1)
Find(1)Find(1)
Find(1)
 
20100717tobesetu
20100717tobesetu20100717tobesetu
20100717tobesetu
 

Gorinphp0729

  • 1.  AW技能五輪 第一回 PHPセミナー 資料  技能五輪  若年者ものづくり競技大会  出場者向け  第一回 PHPセミナー 資料 講師  : 塚田 朗弘 資料作成: 電設部技能五輪プロジェクト サポート: 電設部技能五輪プロジェクト 初版  : 2009年07月29日 第四版 : 2009年08月05日 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 2.  講師紹介 名前 : 塚田 朗弘(つかだ あきひろ)    学科 : 高度情報処理科(07JZ) 所属 : 電設部(IT勉強会PJTリーダ) ID   : atcorp(はてな・ついったー)   その他 : http://tinyurl.com/atcorp-at-it         ↑いますぐクリック! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 3.  も く じ 1.配列の操作 2.データベース(mysql)の操作 1-1. "配列"ってなんだろう 5 2-1. データベースって何だろう 17 1-2. "配列"をイメージしよう 6 2-2. データベースをイメージしよう 18 1-3. こんなときによく使う 9 2-3. 対五輪必須DBテクニック 21 1-4. 演習課題をやってみよう 10 2-4. 実習環境の準備 22 1-5. 演習課題こたえあわせ 11 2-5. データの登録 25 1-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.  1. 配列の操作 第一部 配列の操作 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 5.  1. 配列の操作  1-1. "配列"って何だろう ◆配列は、変数(頭に$がつくもの)の仲間。  変数と配列の違いは・・・    ・変数は     一つの変数の中で一つの値    ・配列は     一つの配列の中で複数の値                       を扱う! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 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.  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.  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.  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.  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.  1. 配列の操作  1-5. 演習課題こたえあわせ ex1_4_1.php   ex1_4_2.php AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 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.  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.  1. 配列の操作  1-6. 配列の操作 まとめ ◆配列一個で、複数の値を扱える! →変数は「ハコ」、    配列は「区切られたハコ」 ◆添え字は数字でも文字列でもOK! →文字列の添え字 = 連想配列 ◆例えばこんなときに使います。 →データベースから取得したデータに、   片っ端からアクセスして表示したり    計算したりするとき! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 15.  1. 配列の操作 第一部 配列の操作 完 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 16.  2. データベース(mysql)の操作 第二部 データベース (MySQL) の操作 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 17.  2. データベース(mysql)の操作  2-1. データベースって何だろう ◆ 「膨大なデータを素早く安全に扱うソフト」 1)RDB(リレーショナルデータベース)が主流。   2次元の表形式でデータを扱う。 2)膨大なデータ量と高速なパフォーマンス。   エクセルでは、せいぜい1000件のデータ内を検索すれば   「フリーズ→落ちる→データ消える→泣く」ことになる。   DBでは、数千万件のデータを安定して扱い、且つ高速に   検索・更新・登録・削除することができる。 3)データの損失、不正アクセス、漏洩を防ぐ。   同時アクセスの制御、バックアップとリカバリ機能、   細かく設定できる権限制御などにより、安全にデータを   管理してくれる。 AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  2. データベース(mysql)の操作  2-8. データの削除(2) ◆ DELETE文の構文 DELETE FROM  表名 [WHERE 絞込み条件] ・WHERE句の使い方はSELECT文とまったく同じ。 ・WHERE句を指定しないと、表にある全ての行を  削除してしまう。気をつけて! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 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.  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.  2. データベース(mysql)の操作  2-9. ここまでのまとめ ここまでで   データの登録(INSERT文) データの検索(SELECT文) データの更新(UPDATE文) データの削除(DELETE文) を見てきた。また、   phpMyAdminで、正しい(機械的な)SQL文を確認できる   ということも分かった。では最後に、 phpのプログラムでSQLを実行する方法を 確認していこう! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  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.  2. データベース(mysql)の操作  2-16. 演習問題こたえあわせ(1) ex2_15_1.php user テーブルから全てのデータを取得し、その結果セットから先頭の一行を取り出し、 その行の一列目の値を表示してください。 <?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, col9 if ($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.  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.  2. データベース(mysql)の操作  2-16. 演習問題こたえあわせ(3) ex2_15_3.php user テーブルから、「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.  2. データベース(mysql)の操作  2-16. 演習問題こたえあわせ(4) ex2_15_4.php contest テーブルの、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.  2. データベース(mysql)の操作  2-16. 演習問題こたえあわせ(5) ex2_15_5.php user テーブルに、次の新規データを登録してください。 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.  2. データベース(mysql)の操作  2-16. 演習問題こたえあわせ(6) ex2_15_6.php contest テーブルの全ての行を削除し、その処理が成功した場合のみ、続いて 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.  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. 
  • 72.  2. データベース(mysql)の操作  2-18. おわりに ◆ 技能五輪金メダルを目指すAWの皆様へ この第一回セミナーで取り上げたことは、 実践的ではありますが最低限の内容とも言えます。 (先輩はこのくらいのことをやっていました) SQLやphpには、DBを操作するためのもっと 便利な使い方もたくさんあります。 (たとえば、「登録年月日が一番古い」という条件を書く、 DB処理中にエラーが発生したら更新を元に戻す、などなど) 「こんなことできないのかなぁ?」「この辺もっとkwsk」 ということがあったら、あきらめる前にググるか、 電設部 技能五輪PJTまでお気軽にご質問ください。 大丈夫、大体のことはできますよ! (たぶんね) AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT. 
  • 73.  AW技能五輪 第一回 PHPセミナー 資料 長時間お疲れさまでした! AW技能五輪 第一回 PHPセミナー (c) 2009 Akihiro Tsukada, JO-GORIN-PJT.