WebプログラミングU PHP

 目次へ 前へ 次へ

2008/6/24 久米

 

3 PHP応用

3.1 データベース連携

3.1.1 基本手順

PHP手順
SELECT文
発行例
INSERT, UPDATE, DELETE文
発行例
1. MySQLに接続する。 $con=mysql_connect("localhost", "root", "root");
2. データベースを選択する。
(接続が1つなら$con省略可)
$sel=mysql_select_db("kume", $con);
3. SQL文を組み立てる。 $sql="SELECT * FROM ranking ORDER BY point DESC";
4. SQL文を発行する。
(接続が1つなら$con省略可)
$rst=mysql_query($sql, $con);
5. 結果を処理する。 $row=mysql_fetch_array($rst);
mysql_free_result($rst);
//戻り値を if($rst) でチェック
6. MySQLとの接続を閉じる
(自動切断するので省略可能)
$cls=mysql_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
  No way to say 浜崎あゆみ 1230
  Voyage 浜崎あゆみ 1100
  誰かの願いが叶うころ 宇多田ひかる 890
  COLORS 宇多田ひかる 1310
  ・・・    

phpMyAdminでの操作

 

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

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

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="SELECT * FROM ranking ORDER BY point DESC";
$rst=mysql_query($sql, $con);

$m="id title artist point<br>";
while($row=mysql_fetch_array($rst)){
    $m.=$row["id"]." ";
    $m.=$row["title"]." ";
    $m.=$row["artist"]." ";
    $m.=$row["point"]."<br>";
}
mysql_free_result($rst);
$cls=mysql_close($con);
?>

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

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="SELECT * FROM ranking ORDER BY point DESC";
$rst=mysql_query($sql, $con);

$m="id title artist point<br>";
$len=mysql_num_rows($rst);
for($i=0;$i<$len;$i++){
    $row=mysql_fetch_array($rst);
    $m.=$row["id"]." ";
    $m.=$row["title"]." ";
    $m.=$row["artist"]." ";
    $m.=$row["point"]."<br>";
}
mysql_free_result($rst);
$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>select文その2</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>
SELECT文
その3
列名知らない型
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="root";
$DBNAME="kume";

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="SELECT * FROM ranking ORDER BY point DESC";
$rst=mysql_query($sql, $con);

$m="";
$fldlen=mysql_num_fields($rst);
for($i=0;$i<$fldlen;$i++){
    $m.=mysql_field_name($rst,$i)." ";
}
$m.="<br>";
while($row=mysql_fetch_array($rst)){
    for($i=0;$i<$fldlen;$i++){
        $m.=$row[$i]." ";
    }
    $m.="<br>";
}
mysql_free_result($rst);
$cls=mysql_close($con);
?>

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

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

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

$cls=mysql_close($con);
?>

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

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

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

$cls=mysql_close($con);
?>

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

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

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

$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<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."おはよう";

の簡略形です。