00メニュー > 01はじめてのMySQL > 02MySQLの基礎知識 > 03MySQLを使いこなす > 04MySQL+PHPの基礎 > 05MySQL+PHPの実践 > 06Appendix

16PHPの基礎知識(備忘録)→ > 01p > 02p > 03p > 04p > 05p > END

04MySQL+PHPの基礎

「基本からのMySQL」ですが、今やWebでの利用を考えずにMySQLを勉強することはできません。MySQLを利用するために必要な範囲でのWebとPHPの知識を勉強します。
☆CHAPTER15⇒MySQLを利用するためのPHP
★CHAPTER16⇒PHPの基礎知識
☆CHAPTER17⇒PHPスクリプトとHTML
☆CHAPTER18⇒PHPスクリプトでMySQLを操作する

★CHAPTER16⇒PHPの基礎知識(p347)★

  PHPでプログラムを作るための基礎知識を学びます。PHPは奥が深く、関数だけでも1,000以上と膨大な数です。「MySQLを利用する上でのPHPの知識」に絞り、MySQLを制御するのに最低限必要な「変数」「文字列」「関数」「比較演算子」「条件分岐」「繰り返し」「配列」を解説します。

(1)《変数 p000》

(1-1)《変数 p000》

PHPがMySQLと連携する上で、変数は欠かすことのできない大切な役割を果たします。

(1-2)<変数名の規則>

変数の名前の設定には,いろいろな規則があります。PHPの場合には、次のような規則があります。
・最初は「$」を付ける
・大文字、小文字を区別する
・文字や数字や「_」(アンダースコア)で構成される
・「$」の次を数字で始まることはできない

(1-3)<定義済み定数>

PHPには、定義済み定数というユーザーが設定しなくても最初から定義されている値がありいます。
例えば、次のような円周率やPHPのバージョンを表す定数には、そのまま利用することができます。

●PHPの定数の例
M_PI→円周率
PHP_VERSION→PHPのバージョン
PHP_OS→動作しているOS

(1-4)<定数のテーブル>

次に変数の「データ型」です。PHPの場合、データを定義しなくても変数が使えるという特徴があります。面倒な定義を必要とせず、「文字列を代入すれば文字列型」「整数を入れれば整数型」というように、代入したときにPHPが自動的にその型を決めてくれます。
※MySQLでテーブルを作るときは、最初からフィールドのデータ型を決めておく必要がありました。
数値型のカラムに文字列を入れることは、基本的にできません。 また、ストアドファンクションで使う変数は、最初に「DECLARE」でその型を宣言する必要がありました。
※これに対して、PHPは実におおらかで、「入れちゃえば、後は型を合わせるよ」という仕様になっています。
次は、PHPで使うことが出来る主なデータ型です。

●PHPで使える主なデータ型

【画像】 ※代入すれば勝手にデータ型を設定してくれます。

(2)《文字列 p000》

(2-1)<文字列の結合>

文字列をつなげる方法です。文字列を結合するときには、PHPは「.」を使います。文字列データは「""」や「''」で囲むので「西沢」と「夢路」を結合して表示するときは、「"西沢"."夢路"」とします。
join.php

(2-2)<「”」と「’」の使い方>

文字列は「""」や「''」で囲んで表します。 だだし、「""」で囲った文字の中に「"」の文字を入れたり、「''」で囲った文字の中に「'」の文字を入れたりすることはできません。これは、PHPは「"」や「'」があると、それを文字列の始点あるいは終点だと判断するため、結果として「'」や「"」が足りない、あるいは多いと処理されてしまうからです。

(2-3)<変数を「””」と「’’」で囲むときの違い>

文字列データは「」と「」のどちらで囲んでもよいのですが、変数を囲むときには処理結果に違いが生じます。
次のようになります。

$a = 123;
print "$a"
?>
※この場合は展開されます。


$a = 123;
print '$a'
?>
※この場合は展開されません(文字列扱い)
double_quotation.php
single_quotation.php

(3)《関数 p000》

(3-1)<ここで扱うPHP関数>

PHPには、1000以上の関数があります。ここでは、登場する関数を紹介します。

●ここで登場する関数(dateは除く)

【画像】 ※「mysql_」で始まるのは、MySQLデータベースを扱う関数です(ちなみに、POStareSQLを扱う関数は「pg」で、また、SQLiteを扱う関数は「sqlite」で始まります)。

(3-2)<date関数による日時・時刻表示>

まずは、日時・時刻の処理に欠かすことのできない「date」関数を紹介します。

●書式⇒date関数の書式

date(日時の書式)
※「date」は日時を返す関数です。引数に次のような文字列を指定すると、それぞれ対応する日時の値を返します。

●date関数に指定できる文字列


hizuke.php

(3-3)<getenv関数によるIPアドレスの表示>

●phpinf関数による環境情報

「phpinfo」関数は、使用されているPHPに関するいろいろな情報を得ることができる。
phpinfo();
?>

●getenv関数

getenv関数は「」を返す関数で、特定の引数を指定することで、対応する情報が得られます。

●書式⇒getenv関数の書式

getenv(得たい情報の項目)

●getenv関数で指定する引数と、得られる情報

serv_disp.php

(3-4)<gethostbyaddr関数によるホスト名の取得>

gethostbyaddr関数は「IPアドレスからホスト名を得る」関数です。 ちなみに「get-host-by-addr」と書けば、「アドレスからホストを得る」という意味がわかりやすくなります。

●書式⇒gethostbyaddr関数の書式

gethostbyaddr(得たいホストのIPアドレス) ※さて、前項の「getenv("REMOTE_ADDR")」で得たIPアドレスを引数にし て、gethostbyaddr関数を設定すれば、クライアントのホスト名を得ることができます。

<?php
print gethostbyaddr(getenv("REMOTE_ADDR"));
?>
host_disp.php

●gethostbyaddr関数の利用

それでは、gethostbyaddr関数を使って、クライアントの情報を送り返すPHPスクリプトを作ってみましょう。
※アクセスしてきた「クライアントのIPアドレス」「クライアントのホスト名」「クライアントの情報」を表示するPHPです。
<?php
print "あなたのIPアドレスは:";
print getenv("REMOTE_ADDR");
print "<BR>";
print "あなたのポスト名は:";
print gethostbyaddr(getenv("REMOTE_ADDR"));
print "<BR>";
print "あなたのブラウザは:";
print getenv("HTTP_USER_AGENT");
print "<BR>ですね";
?>

client.php

(4)《比較演算子 p000》

以降で解説する「繰り返し」処理や「条件分岐」では、設定した条件に一致しているかどうか を判断する部分があります。このとき使う記号が比較演算子です。PHPでは、次のような「 比較演算子」を使います。

●比較演算子

【画像】

(5)《「繰り越し」処理 p000》

プログラムを実行することの利点に1つは、同じ処理を何百回何千回だろうと、疲れを知らず間違えることなく繰り返して処理を実行してくれることです。
ここでは、そんな「繰り返し」処理を行なう「for」と「while」の構文を紹介します。

(5-1)<forによる繰り返し>

●forとは

forとは、カウンタ変数という「数を数えるための変数」を用意し、指定した範囲にある処理を 繰り返します。forの構文は、次のようになります。

●書式⇒for

for(初期値;繰り返しの条件;変化){
繰り返し実行する処理
}

●forを使う

用語だけではイメージしにくいので、実際に実行してみましょう。
※「*」の文字を15回繰り返し表示する例
<?php
for($i=1;$i<=15;$i+1){
print "*";
}
?>

for.php

●forの流れ

$i=1→ 変数が、一番最初は「1」(初期値)
$i<=15→$iが15以下のうちは繰り返しなさい(繰り返しの条件)
$i=$i+1→繰り返すときは1つずつプラスしなさい(変化)
「$i=$i+1」を省略して書くと「$i++」となります。<これをインクリメントといいます。>

for_variation.php

(5-2)<whileによる繰り返し>

次はwhileによる繰り返しです。今度は「繰り返しを行なう条件」が正しい(TRUE)間は、「繰り返しの処理」の部分を繰り返します。
次のような構文になります。

●書式⇒while

while(繰り返しを行なう条件){
繰り返しの処理
}
※whileでは、特にカウンタ変数の初期値を設定する部分がないので、自分で初期値を設定 しなければなりません。そして繰り返して行くうちに必ず「繰り返しを行なう条 件」が誤り「FALSE」になるようにしなければなりません。

●whileを使う

今度はwhileを使って同じことをやってみましょう。まず、最初にカウンタ変数「$i」を用意してこれに「1」を代入します。
そして、「print "*"」を実行するたびに「$i」を1ずつ増やし、これをwhileで繰り返します。繰り返しの条件は「変数$iが15以下」とします。
<?php
$i=1;
while($i<=15){
print "*";
$i++;
}
?>

while.php

(5-3)<do~whileによる繰り返し>

whileと似ている構文に「do~while」があります。

●書式⇒do~while

do{
繰り返しの処理
}while(繰り返しを行なう条件)
※whileと違うのは、条件を調べるが処理の後に来るという点です。
<?php
$i=1;
do{
print "*";
$i++;
}while($i<=15)
?>

do_while.php

※「$i=1」では最初は「1」、「$i++」で「1を足せ」、「while($i<=15)」で「15以下の間」と処理します。
※注意すべき点は、whileの場合は最初に条件を調べるので、もしそこで条件に合っていな ければ「1回も処理することなく終わる」ということです。
しかし、do~whileの場合には、条件を調べるが最後なので、「最低でも1回は実行」します。

(6)《条件分岐 p000》

(6-1)<ifによる条件分岐>

ifは、条件によって実行する内容を変化させるものです。PHPスクリプトでは、次のような構 文になります。

●書式⇒ifの構文

if(条件){
条件が正しいとき実行する処理
else{
条件が正しくないときに実行する処理
}
※()内は「条件」が合っていれば(TRUE)、「条件が正しいとき実行する処理」を実行し、そうでなければ(「条件」が合っていなければ:FALSE)「条件が正しくないときに実行する処理」 を実行します。

●ifの流れ

<?php
if(200>100){
print "大きいです";
}else{
print "小さいです";
}
?>

zyouken.php

なを、構文中の「else{条件が正しくないとき~}」の部分は、必要なければ省略することがで きます。

(6-2)<複数の条件を設定したifの構文>

ifでは、条件式を何重にも設定することができます。次はその構文です。

●書式⇒複数の条件を設定したifの構文

if(条件1){
条件が正しいとき実行する処理
}elseif(条件2){
条件が正しいとき実行する処理
}elseif(条件3){
条件が正しいとき実行する処理
}else{
すべての条件が正しくないときに実行する処理
}

●複数の条件を設定したif文の流れ

では、アクセスしたときの時間に応じて変化する挨拶のメッセージを作って見ましょう。
具体的には、0時から「眠くないですか」6時から「おはようございます」、9時から「こんにちは」、18時から「こんばんは」と表示するように作ってみましょう。
<?php
if (date("G")>=18){
print "こんばんは";
}elseif(date("G")>=9){
print "こんにちは";
}elseif(date("G")>=6){
print "おはようございます";
}else{
print "眠くないですか";
}
?>

if.php

(6-3)<switchを使った分岐>

変数の値によって、それぞれ異なる処理を実行する場合には「switch」を使います。たとえ ば、変数「$i」が「1」のときは「××」変数「$i」が「2」のときは「△△」、変数「$i」が「3」のときは 「○○」・・・を実行する、というような処理ができます。
※このような処理は、前項のifを組み合わせても同じように実行できます。しかし、「switch」を使うと、より分り易く記述できます。

●書式⇒switchの構文

switch(変数){
case 変数の値1:
処理1
break;
case 変数の値2:
処理2
break;
default:
すべての条件が正しくないときに実行する処理
}
※switchの後に設定する「変数」がcaseの後に記述した値と一致した場合、それぞれの「処 理」が実行されます。
それぞれの処理の最後には必ずbreakを付けてください。「break」は処 理を終了する命令です。
※一致する値がない場合は、「default:」の次に書かれた処理が実行されます。

●switch文の流れ№1

<?php
switch(date("G")){
case 10:
print "10時のおやつです";
break;
case 15:
print "3時のおやつです";
break;
default:
print "おやつではありません";
}
?>

※それぞれの処理の後に「break」を記述することを忘れてはいけません。万が一「break」を 記述しなかった場合、その後の処理も実行されてしまいます。
また「case 変数の値1:」などの「:」(コロン)にも注意してください。

oyatu.php

●switch文の流れ№2

<?php
for($x=1;$x<=8;$x++){
for($y=1;$y<=5;$y++){
switch($y){
case 1:
print "◎";
break;
case 2:
print "★";
break;
case 3:
print "○";
break;
case 4:
print "▽";
break;
case 5:
print "▲";
break;
}
}
}
?>

switch.php

●switch文の流れ№3

※処理の内容を見て見ましょう。
①まずいかの部分を変数「$y」が「1」なら◎、「2」なら★、というような処理を分岐させます。
switch($y){
case 1:
print "◎";
break;
case 2:
print "★";
break;
----------------
----------------
case 5:
print "▲";
break;
}
②そして、このswitch文を次のようにforで繰り返します。
for($y=1;$y<=5;$y++){
switch($y){
----------------
----------------
}
}
③変数「$y」は、1、2、3、4、5、と増えていきますので、それぞれの「◎」「★」「○」「▽」「▲」が書き出されます。
※このカウンタ変数「$y」を使ったfor文を、さらにカウンタ変数「$x」を使ったfor文で8回繰り返します。
for($x=1;$x<=8;$x++){
for($y=1;$y<=5;$y++){
switch($y){
----------------
----------------
}
}
}
>

(7)《配列 p000》

(7-1)<配列とは何か>

ここまで使ってきた変数は、「$i=1000」のように、1つの値だけを格納していました。実は、「見かけは1つでも、たくさんの値を格納できる」という、便利な変数があります。これを配列といいます。 たとえば、「」という変数を配列にして、この中にたくさん格納するためには次のようにします。 $m = array("ネズミ","ウシ","トラ","ウサギ","Dragon"); これで「」という1つの変数に、「ネズミ」「ウシ」「トラ」「ウサギ」「Dragon」 という5つの文字列 が格納されました。PHPでは、「データ」を代入すれば、勝手にそのデータ型を設定してれ るので、これで「$m」は「文字列」型の配列変数となります。

■実行結果

●格納された値と対応する配列変数

【画像】 ※[]の中の数値で、「何番目の値か」ということを判断します。この[]の中に書く数値を、添え字といいます。

(7-2)<配列に値をいれる方法>

array関数を使わずに配列変数に値を入れる方法には、次のようなものがあります。

●直接代入する

$m[4] = "Dragon";
$m[0] = "ネズミ";
$m[2] = "トラ";
$m[1] = "ウシ";
$m[3] = "ウサギ";
※この場合は、で別に順番に関係なく入れることができます。

●順番に代入する

$m[] = "ネズミ";
$m[] = "ウシ";
$m[] = "トラ";
$m[] = "ウサギ";
$m[] = "Dragon";

●配列を使った例

配列関数「$m」に「眠くないですか」「おはようございます」「こんにちは」「こんばんは」を代入 し、0時から「眠くないですか」、6時「おはようございます」、9時「こんにちは」、8時「こんばんは」と表示されます。

<?php
$m=array("眠くないですか","おはようございます","こんにちは","こんばんは");
if (date("G")>=18){
print $m[3];
}elseif(date("G")>=9){
print $m[2];
}elseif(date("G")>=6){
print $m[1];
}else{
print $m[0];
}
?>

hairetu.php

(7-3)<連想配列>

添え字は、順番を表す数値以外にも、ユーザーが決めた文字を使うことができます。これを 連想配列といいます。
たとえば、テストの点を格納する配列変数で、英語なら「$t["eigo"]」、国語なら「$t["kokugo"]」・・・のように、次のように直感的にわかりやすい添え字を設定することができます。
次の例は連想配列を使ってみました。

<?php
$t["eigo"]=73;
$t["suugaku"]=84;
$t["kokugo"]=68;
print "合計点は:";
print $t["eigo"]+$t["suugaku"]+$t["kokugo"];
?>

rensou.php

<まとめ>

●PHPの変数の使い方
●PHPにおける文字列の扱い
●PHPの関数の概略といくつかの関数
●比較演算子の使い方
●繰り返し処理のプログラミング
●条件分岐のプログラミング
●配列の使い方
※この章の内容は、すべて今後のMySQLとの連携に必要なものです。特にプログラム言語 が初めての方。forやwhile、switchなどは、プログラミングの基本です。

<チェック>

□PHPの変数名の規則を理解している
□PHPでの文字列を結合する方法を理解している
□変数「""」と「''」で囲むときの違いを理解している
□日時や時刻を表示することができる
□クライアントのIPアドレスやWebサーバの情報を表示することができる
□forを使った繰り返し処理がわかる
□whileを使った繰り返し処理がわかる
□ifを使った条件分岐がわかる
□switchを使った分岐がわかる
□配列の使い方がわかる

<練習問題>

問題1
MyISAMテーブルでは、次の構文でテーブルのバックアップ、リストアできます。
(フォルダの指定には「\」を使わずに「/」を使い「c:/folder」のように記述)。
■テーブルのバックアップ
BACKUP TABLE テーブル名 TO "バックアップ先のフォルダ";
■テーブルのりストア
RESTORE TABLE テーブル名 FROM "バップアップ先のフォルダ";
※この方法を使って、テーブル「tb1」をCドライブの「data」フォルダにバックアップし、さらにテーブル「tb1」を削除後、リストアしてみましょう。

《解答1》

次のPHPスクリプトを作成します。サンプル名(alendar.php)
<?PHP
for($i=0;$i<=30;$i++){
print date("Y/m/d (l)",strtotime("now +$i day"));
print "<BR>";
}
?>

【実行結果】

calendar.php