WebプログラミングU PHP

 目次へ 前へ 次へ

2015/6/23 久米

 

3 PHP応用

3.1 データベース連携

3.1.1 基本手順(簡易型)

PHP手順
SELECT文
発行例
INSERT, UPDATE, DELETE文
発行例
1. MySQLに接続する。 $con=mysqli_connect("localhost", "web2", "771", "web2");
2. SQL文を組み立てる。 $sql="SELECT * FROM ranking ORDER BY point DESC";
3. SQL文を発行する。
(接続が1つなら$con省略可)
$rst=mysqli_query($con, $sql);
4. 結果を処理する。
メモリ開放(早く開放できる)
while ($row=mysqli_fetch_array($rst)) {
//
}
mysqli_free_result($rst);
//戻り値を if($rst) でチェック
5. MySQLとの接続を閉じる
(自動切断するので省略可能)
mysqli_close($con);

事前に自分のDBに、下記テーブルを作成し、

CREATE TABLE ranking(
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(64),
artist VARCHAR(64),
point INT
);

下記のようなデータをインサートしておく。

id title artist point
  Moments 浜崎あゆみ 980
  ヴォーグ 浜崎あゆみ 1230
  Boys & Girls 浜崎あゆみ 1100
  誰かの願いが叶うころ 宇多田ひかる 890
  オートマチック 宇多田ひかる 1310
  そばかす JUDY AND MARY 1050
  クラシック JUDY AND MARY 1380
  ヘビーローテーション AKB48 1450
  ・・・    

insert into ranking
(title, artist, point)
values
('Moments','浜崎あゆみ',980),
('ヴォーグ','浜崎あゆみ',1230),
('Boys & Girls','浜崎あゆみ',1100),
('誰かの願いが叶うころ','宇多田ひかる',890),
('オートマチック','宇多田ひかる',1310),
('そばかす','JUDY AND MARY',1050),
('クラシック','JUDY AND MARY',1380),
('ヘビーローテーション','AKB48',1450)

phpMyAdminでの操作

 

3.1.2 SELECTで読み取った値の参照方法

  1. 読み取った結果(1行)を $row=mysqli_fetch_array($rst) というように変数$rowに入れる。
  2. 必要な列の値を、$row["列名"]で参照する。
  3. 1にもどって次の行の処理をする。

 

3.1.3 各SQL文発行

ではPHPで各SQL文を発行してみましょう。

SELECT文
その1
while型
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="kume";

$con=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
$sql="SELECT * FROM ranking ORDER BY point DESC";
$rst=mysqli_query($con, $sql);

$m="id title artist point<br>";
while($row=mysqli_fetch_array($rst)){
    $m.=$row["id"]." ";
    $m.=$row["title"]." ";
    $m.=$row["artist"]." ";
    $m.=$row["point"]."<br>";
}
mysqli_free_result($rst);
mysqli_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>select文その1</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>
SELECT文
その2
for型
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="kume";

$con=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
$sql="SELECT * FROM ranking ORDER BY point DESC";
$rst=mysqli_query($con, $sql);

$m="id title artist point<br>";
$len=mysqli_num_rows($rst);
for($i=0;$i<$len;$i++){
    $row=mysqli_fetch_array($rst);
    $m.=$row["id"]." ";
    $m.=$row["title"]." ";
    $m.=$row["artist"]." ";
    $m.=$row["point"]."<br>";
}
mysqli_free_result($rst);
mysqli_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>select文その2</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>
INSERT文
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="kume";

$con=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
$sql="INSERT INTO ranking (title, artist, point)
        VALUES ('亜麻色の髪の乙女', '島谷ひとみ', 950)";
$rst=mysqli_query($con, $sql);

if($rst) $m="成功しました。";
else $m="失敗しました。";

mysqli_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>insert文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>
UPDATE文
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="kume";

$con=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
$sql="UPDATE ranking SET point=1980
        WHERE title='亜麻色の髪の乙女'";
$rst=mysqli_query($con, $sql);

if($rst) $m="成功しました。";
else $m="失敗しました。";

mysqli_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>update文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>
DELETE文
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="";
$DBNAME="kume";

$con=mysqli_connect($DBSERVER, $DBUSER, $DBPASSWORD, $DBNAME);
$sql="DELETE FROM ranking
        WHERE title='亜麻色の髪の乙女'";
$rst=mysqli_query($con, $sql);

if($rst) $m="成功しました。";
else $m="失敗しました。";

mysqli_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>delete文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>

 

演習1)SELECT文で、表示させるとき、表形式で表示させるようにしてみる。
また、ポイント順に順位をつけてみる。

順位 タイトル アーティスト ポイント
1 COLORS 宇多田ひかる 1310
2 No way to say 浜崎あゆみ 1230
3 Voyage 浜崎あゆみ 1100
4 ・・・ Bz 1005
5 ・・・ モー娘。 995
6 Moments 浜崎あゆみ 980
7 誰かの願いが叶うころ 宇多田ひかる 890
  ・・・    

 

 

演習2)SELECT文で、「浜崎あゆみ」だけを表示させるようにしてみる。

演習3)SELECT文で、「浜崎あゆみ」の中で1000ポイント以上を表示させるようにしてみる。

 

コラム

$m.="おはよう"; は

$m=$m."おはよう";

の簡略形です。

 

演習4)phpで、実技試験のテーブルにデータを挿入し、問題1から問題4までを行ってみよ。

テーブル名は変更すること。

 


[mysqld]
character-set-server=utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

 

mysqli_set_charset($con, "UTF8");