第5回 PHPで実用アプリケーションを作ろう(前編)

MySQLユーザ会
2001/4/3

PHPでMySQLを操作

 ここからはPHPスクリプトからMySQLサーバにアクセスするための方法を1つずつ見ていきます。

■MySQLデータベースとの接続・切断

 MySQLサーバへの接続にはmysql_connect関数を下記の要領で用います。

<?php
$接続ID = mysql_connect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");
?>

 mysql_connect()の戻り値として接続IDを受け取ります。切断の手順を加えると下記のようになります。

<?php
$接続ID = mysql_connect("...","...","....");
mysql_close($接続ID);
?>

 実際にはスクリプトの終了とともに接続IDも破棄され、MySQLサーバへの接続も解除されるのですが、行儀よく接続を閉じる癖をつけておきましょう。

 例では日本語の変数名を利用していますが、実際には“$con”などの非2bytes文字を使用すべきです。また、ファイル自体も漢字コードをEUCで保存するようにし、ファイルの先頭には

<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-euc-jp">
    <TITLE>XXXXXXX</TITLE>
</HEAD>

を加えてファイルがEUC漢字コードであることをブラウザに明示しましょう。

 mysql_connect()関数とは別に、もう1つMySQLサーバとの接続を確立する関数が用意されています。上記のmysql_connect()関数がスクリプトの終了とともに自動的に接続が解除されるのに対し、下記の方法はスクリプト終了後も永続的に接続が確立されます。

<?php
$接続ID = mysql_pconnect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");
?>

 mysql_pconnect()関数は、すでに同じサーバ・ユーザーで接続が確立されている場合、新たな接続を試みず、既存の接続IDを返します。そのため何度呼び出されても無駄な接続が発生しません。データベースへの接続が頻繁な用途では、プロセスを最小限にできるので動作コストが少なくなります。しかし、データベースとの接続がそれほど頻繁でない場合は、サーバに無駄なプロセスを常駐させることになります。どちらの接続関数を使うかは、運用をよく考える必要があります。

■データの取得と表示

 MySQLデータベースとの接続確立後は、データベース名を指定してSQL文を実行します。

<?php
...(省略)...
mysql_select_db("データベース名",$接続ID);
mysql_query("SQL文",$接続ID);
...(省略)...
?>

 SQL文がSELECTの場合、mysql_query()関数は戻り値にクエリーIDを返します。検索結果を取得したい場合は、クエリーIDに対してmysql_fetch_object()関数を用います。

<?php
...(省略)...
$クエリーID = mysql_query("SELECT分で始まるSQL文",$接続ID);
$結果オブジェクト = mysql_fetch_object($クエリーID)
...(省略)...
?>

 mysql_fetch_object()の戻り値として結果オブジェクトを受け取ります。そう、やはりここでもオブジェクトという概念が必要になります。本連載のPerlの回でも紹介していますので、そちらも参考にしてください。

 実際の値の取得プロセスを含めると下記のようになります。

<?php
...(省略)...
$結果オブジェクト = mysql_fetch_object($クエリーID)
echo $row->テーブルのカラム名;
...(省略)...
?>

 どうしてもオブジェクト的な方法を使いたくない方は、連想配列で結果を取得する手段も用意されています。

<?php
...(省略)...
$結果 = mysql_fetch_array($クエリーID)
echo $row["テーブルのカラム名"];
...(省略)...
?>

 どちらの場合も、最後はmysql_free_result()関数を使って結果を保持しているメモリ領域を解放しましょう。

<?php
...(省略)...
print "$row...
mysql_free_result($クエリーID);
...(省略)...
?>

■そのほかのデータの操作

 SELECT以外のSQL文の場合にもmysql_query()関数を使います。ただし、その場合戻り値はクエリーIDではなく、“true”か“false”を返します。

 また、ここで紹介した以外にも、主に以下のようなMySQL用関数があります。

参照 http://www.php.net/manual/ja/ref.mysql.php

mysql_affected_rows 一番最近のクエリーで変更された行の数を得る
mysql_change_user アクティブな接続でログイン中のユーザーを変更する
mysql_close MySQL接続を閉じる
mysql_connect MySQLサーバへの接続をオープンする
mysql_create_db MySQLデータベースを作成する
mysql_data_seek 内部的な結果ポインタを移動する
mysql_db_name データベース名を得る
mysql_db_query MySQLクエリーを送信する
mysql_drop_db MySQLデータベースを破棄(削除)する
mysql_errno 直近のMySQL処理からエラーメッセージのエラー番号を返す
mysql_error 直近に実行されたMySQLコールのエラーメッセージを返す
mysql_fetch_array 連想配列、添字配列、またはその両方として結果の行を取得する
mysql_fetch_assoc 連想配列として結果の行を取得する
mysql_fetch_field 結果からカラム情報を取得し、オブジェクトとして返す
mysql_fetch_lengths 結果における各出力の長さを得る
mysql_fetch_object 結果の行をオブジェクトとして取得する
mysql_fetch_row 結果を添字配列として取得する
mysql_field_flags 結果において指定したフィールドのフラグを得る
mysql_field_name 結果において指定したフィールド名を得る
mysql_field_len 指定したフィールドの長さを得る
mysql_field_seek 結果ポインタを指定したフィールドオフセットにセットする
mysql_field_table 指定したフィールドが含まれるテーブルの名前を得る
mysql_field_type 結果において指定したフィールドの型を得る
mysql_free_result 結果保持用メモリを解放する
mysql_insert_id 直近のINSERTで生成されたIDを得る
mysql_list_dbs MySQLサーバ上で利用可能なデータベースのリストを得る
mysql_list_fields MySQL結果フィールドのリストを得る
mysql_list_tables MySQLデータベース上のテーブルのリストを得る
mysql_num_fields 結果におけるフィールドの数を得る
mysql_num_rows 結果における行の数を得る
mysql_pconnect MySQLサーバへの持続的な接続をオープンする
mysql_query SQLクエリーをMySQLに送信する
mysql_result 結果データを得る
mysql_select_db MySQLデータベースを選択する
mysql_tablename フィールドのテーブル名を得る

2/2

Index
快速MySQLでデータベースアプリ!
  PHPとMySQL
  ApacheとPHP4のインストール
 Apacheのインストール
 PHP4のインストール
 ApacheでPHP4を有効化する設定
 PHPスクリプトの動作テスト
 コラム:今月のMySQL
PHPでMySQLを操作
 MySQLデータベースとの接続・切断
 データの取得と表示
 そのほかのデータの操作

連載 快速MySQLでデータベースアプリ!


 Linux Squareフォーラム データベース関連記事
連載:快速MySQLでデータベースアプリ!(全11回)
軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説
連載:今から始める MySQL入門(連載中)
定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する
連載:Oracleマイスター養成講座(全6回)
本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座
連載:DB2マイスター養成講座(全7回)
本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説
特集:エンタープライズ市場に向かうMySQL 5.0[前編]
MySQL 5.0の新機能をアルファ版でチェック
1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる
特集:Linuxで動くリレーショナルデータベース・カタログ
データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

TechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ



- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH