Webシステムを作る(1)

プロジェクトの準備

  • 「makers」「my_items」「carts」テーブルを備えた「mydb」というデータベーススペースを準備しておく
  • 「htdocs」内に「shop」フォルダーを作成し、管理フォルダーに設定しておく


mysql_connect



リソース = mysql_connect ( ホスト名, ユーザー名, パスワード );


《index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>MySQLに接続する</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
  echo 'データベースに接続しました';
?>
</div>
</div>
</body>
</html>


die() ファンクションは、処理を終了させる
  • 接続に失敗すると「false」を返すため、これを利用して処理を途中で終了する
if ( !mysql_connect ( 'localhost', 'root', 'password' ) ) {
  die ( mysql_error () );
}


論理演算子 or で記述

mysql_connect ( ... ) or die ( mysql_error () );

mysql_select_db

  • データベーススペースを選択する



mysql_select_db ( データベーススペース名 );


《index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>データベーススペースを選択する</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
  echo 'データベースに接続しました<br>'."\n";
mysql_select_db( 'mydb' ) or die(mysql_error());
  echo 'データベーススペース「mydb」を選択しました';
?>
</div>
</div>
</body>
</html>


mysql_query ( 'SET NAMES ...' );

<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
  echo 'データベースに接続しました<br>'."\n";
mysql_select_db( 'mydb' ) or die(mysql_error());
  echo 'データベーススペース「mydb」を選択しました';
mysql_query( 'SET NAMES UTF8' );
?>
  • 確認メッセージを削除
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>文字コードを設定する</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
mysql_select_db( 'mydb' ) or die(mysql_error());
mysql_query( 'SET NAMES UTF8' );
?>
</div>
</div>
</body>
</html>

mysql_query

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>SQLを実行する</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
mysql_select_db( 'mydb' ) or die(mysql_error());
mysql_query( 'SET NAMES UTF8' );

mysql_query( 'INSERT INTO my_items SET maker_id=1, item_name="もも", price=210, keyword="缶詰,ピンク,甘い", sales=0, created="2013-02-01", modified="2013-02-01"' ) or die(mysql_error());
  echo 'データを挿入しました';
?>
</div>
</div>
</body>
</html>



INSERT以外のSQL

UPDATE

<?php
...

mysql_query( 'UPDATE my_items SET item_name="白桃" WHERE id=6' ) or die(mysql_error());
  echo 'データを変更しました';
?>


DELETE

<?php
...

mysql_query( 'DELETE FROM my_items WHERE id=6' ) or die(mysql_error());
  echo 'データを削除しました';
?>

mysql_fetch_assoc

  • レコードセットからデータを取得する
$recordSetを利用する
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
mysql_select_db( 'mydb' );
mysql_query('SET NAMES UTF8');

$recordSet = mysql_query ( 'SELECT * FROM my_items' ) or die(mysql_error());
?>


変数「$recordSet」には、検索結果が格納されていますがこのままでは利用できません。

mysql_fetch_assocファンクション
  • レコードセットは、「mysql_query」の戻り値です
  • 「my_items」テーブルから無条件にすべてのデータを取り出しています
  • その中から1件のデータを取り出さなければデータとしては利用できません
  • そのために利用するのが「mysql_fetch_assoc」ファンクションです
  • 「fetch(フェッチ)」とは、取ってくること
  • 「assoc」は、「association(連想)」の意
  • つまり「連想配列として取ってくる」という意味


たとえば次のようにして各データを利用することができるようになります。
テーブルのフィールド名が連想配列のキーになります。

$data[ 'id' ] ID
$data[ 'maker_id' ] メーカーID
$data[ 'item_name' ] 商品名
$data[ 'price' ] 価格
$data[ 'sales' ] 販売数
  • 2件目のデータを取り出す
<?php
...

$recordSet = mysql_query( 'SELECT * FROM my_items' ) or die(mysql_error());
$data = mysql_fetch_assoc($recordSet);
  echo $data[ 'item_name' ];
$data = mysql_fetch_assoc($recordSet);
  echo '<br>' . $data[ 'item_name' ];
}
?>


  • 全件を取り出す
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>レコードセットからデータを取得する</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect( 'localhost', 'root', 'password' ) or die(mysql_error());
mysql_select_db( 'mydb' );
mysql_query( 'SET NAMES UTF8' );

$recordSet = mysql_query( 'SELECT * FROM my_items' );
while($data = mysql_fetch_assoc($recordSet)) {
  echo $data[ 'item_name' ];
  echo '<br>';
}
?>
</div>
</div>
</body>
</html>


「while」は、「mysql_fetch_assoc」の結果を、変数「$data」に保存しつつ、その結果が false でないかを検査して商品名を表示し繰り返す。


COUNTなどのキー

  • SQLで「COUNT」を利用して件数を取得する
  • 「AS」を使って名前を「record_count」とする
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>COUNTなどのキー</title>
</head>
<body>
<div id="container">
<div id="head">
<h1>トップページ</h1>
</div>
<div id="content">
<?php
mysql_connect('localhost', 'root', 'password') or die(mysql_error());
mysql_select_db('mydb');
mysql_query('SET NAMES UTF8');

$recordSet = mysql_query('SELECT COUNT(id) AS record_count FROM my_items');
$data = mysql_fetch_assoc($recordSet);
echo '件数は ' . $data['record_count'] . ' 件です';
?>
</div>
</div>
</body>
</html>