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