はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2018/05/30
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> データベースサーバ >> データベース操作(OperatedPHP) 〜 MySQL PHP編 〜
動作確認 [ FC1 / FC2 / FC3 / FC4 / FC5 / FC6 / Fedora7 / Fedora8 / Fedora9 / Fedora10 / Fedora11 / Fedora12 / Fedora13 / Fedora14 / Fedora15 / Fedora16 / Fedora17 / CentOS4 / CentOS5 / CentOS6 ]
  1. 前提条件
  2. PHPでデータベースを使用する
  3. データベースに接続する
  4. データベースコマンド(SQL)の実行
  5. データベースを切断する
  6. サンプルスクリプト
  7. サンプルスクリプトの起動

■ 前提条件

サンプルは、主な使用方法のみです。トランザクションなどは考慮していません。
また、PHPなどの言語仕様等は一切お答えいたしませんので、専門の紹介サイトで確認して下さい。

■ PHPでデータベースを使用する

インストールされているか確認
# rpm -qa php-mysql
コマンド実行結果に何も表示されなければ、パッケージをインストールしてください

パッケージ「php-mysql」のインストール
# yum -y install php-mysql

モジュールを有効にする為、apacheを再起動
【FC1 から Fedora15 / CentOS4 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/httpd restart

【Fedora16以降 の場合】
# systemctl restart httpd.service

■ データベースに接続する

データベース接続の構文
$GLOBALS["dbh"] = mysql_connect($GLOBALS["hostname"],$GLOBALS["dbusername"], $GLOBALS["dbpassword"]);
mysql_select_db($GLOBALS["dbname"]);

$GLOBALS["hostname"]:ホスト名
$GLOBALS["dbname"]:データベース名
$GLOBALS["dbusername"]:接続ユーザ名(Linuxアカウントでない事に注意)
$GLOBALS["dbpassword"]:接続ユーザのパスワード
$GLOBALS["dbh"]:正常接続した時のデータベースハンドル

■ データベースコマンド(SQL)の実行

実行コマンドの構文
$GLOBALS["dbexe"] = mysql_query($sql, $GLOBALS["dbh"])
mysql_free_result($GLOBALS["dbexe"]);

$sql:SQL文
$GLOBALS["dbexe"]:実行コマンドのハンドル

■ データベースを切断する

データベース切断の構文
mysql_close($GLOBALS["dbh"]);

$GLOBALS["dbh"]:データベース接続時のデータベースハンドル

■ サンプルスクリプト

サンプルスクリプトプログラムの作成
# vi /var/www/html/OperatedMySQL.php
<?php
    // EUC表示
    header("Content-Type: text/html; charset=euc-jp");
    //-----------------------------
    // 設定項目                    
    //-----------------------------
    $hostname = "localhost";                // ホスト名
    $dbname = "meibo";                      // データベース名
    $dbusername = "linux";                  // データベース接続ユーザー名
    $dbpassword = "himitsu";                // 接続ユーザパスワード
    $tbname = "user";                       // テーブル名
    $script = "OperatedMySQL.php";          // スクリプト名

    $dbh = NULL;
    $dbexe = NULL;

    $mode = NULL;
    $process = NULL;
    $tb_addname = NULL;
    $opt_del = NULL;
    $tb_newname = NULL;
    $opt_upd = NULL;

//------------------------------
//  メイン処理                  
//------------------------------
decode();
switch($mode){ 
    case 'view': 
        view();
        break; 
    case 'disp_insert': 
        disp_insert();
        break; 
    case 'disp_delete': 
        disp_delete();
        break; 
    case 'disp_update': 
        disp_update();
        break; 
    case 'execute': 
        execute();
        break; 
    default: 
        view();
        break; 
} 

//------------------------------
//  表示処理                    
//------------------------------
function view () {
    task_before();                          // 前処理
        print <<<EOM
  <TABLE border="1" cellspacing="1">
    <TBODY>
      <TR bgcolor="#0080ff">
        <TH>Num</TH>
        <TH>Name</TH>
      </TR>
EOM;
    while($data = mysql_fetch_object($GLOBALS["dbexe"])) {
        print "      <TR>\n";
        print "        <TD>$data->Num</TD>\n";
        print "        <TD>$data->Name</TD>\n";
        print "      </TR>\n";
    }
    print <<<EOM
    </TBODY>
  </TABLE>
EOM;
    task_after();                           // 後処理
}

//------------------------------
//  追加モード表示              
//------------------------------
function disp_insert() {
    task_before();                         // 前処理
    $script = $GLOBALS["script"];
    print <<<EOM
  <FORM action="$script">
    <INPUT type="hidden" name="mode" value="execute">
    <INPUT type="hidden" name="process" value="insert">
  <TABLE border="1" cellspacing="1">
    <TBODY>
      <TR bgcolor="#0080ff">
        <TH>Num</TH>
        <TH>Name</TH>
      </TR>
EOM;
    while($data = mysql_fetch_object($GLOBALS["dbexe"])){
        print "      <TR>\n";
        print "        <TD>$data->Num</TD>\n";
        print "        <TD>$data->Name</TD>\n";
        print "      </TR>\n";
    }
    print <<<EOM
      <TR>
        <TD>Add Value</TD>
        <TD><INPUT size="32" type="text" maxlength="32" name="tb_addname"></TD>
      </TR>
      <TR>
        <TD colspan="2" align="center"><INPUT type="submit" name="btn_submit" value="追加"></TD>
      </TR>
    </TBODY>
  </TABLE>
  </FORM>
EOM;
    task_after();                          // 後処理
    exit ;
}

//------------------------------
//  削除モード表示              
//------------------------------
function disp_delete() {
    task_before();                        // 前処理
    $script = $GLOBALS["script"];
    print <<<EOM
  <FORM action="$script">
    <INPUT type="hidden" name="mode" value="execute">
    <INPUT type="hidden" name="process" value="delete">
  <TABLE border="1" cellspacing="1">
    <TBODY>
      <TR bgcolor="#0080ff">
        <TH>Num</TH>
        <TH>Name</TH>
        <TH>select</TH>
      </TR>
EOM;
    while($data = mysql_fetch_object($GLOBALS["dbexe"])){
        print "      <TR>\n";
        print "        <TD>$data->Num</TD>\n";
        print "        <TD>$data->Name</TD>\n";
        print "        <TD align=\"center\"><INPUT type=\"radio\" name=\"opt_del\" value=\"$data->Num\"></TD>\n";
        print "      </TR>\n";
    }
    print <<<EOM
      <TR>
        <TD colspan="3" align="center"><INPUT type="submit" name="btn_submit" value="実行"></TD>
      </TR>
    </TBODY>
  </TABLE>
EOM;
    task_after();                          // 後処理
    exit ;
}

//------------------------------
//  更新モード表示              
//------------------------------
function disp_update() {
    task_before();                         // 前処理
    $script = $GLOBALS["script"];
    print <<<EOM
  <FORM action="$script">
    <INPUT type="hidden" name="mode" value="execute">
    <INPUT type="hidden" name="process" value="update">
  <TABLE border="1" cellspacing="1">
    <TBODY>
      <TR bgcolor="#0080ff">
        <TH>Num</TH>
        <TH>Name</TH>
        <TH>select</TH>
      </TR>
EOM;
    while($data = mysql_fetch_object($GLOBALS["dbexe"])){
        print "      <TR>\n";
        print "        <TD>$data->Num</TD>\n";
        print "        <TD>$data->Name</TD>\n";
        print "        <TD align=\"center\"><INPUT type=\"radio\" name=\"opt_upd\" value=\"$data->Num\"></TD>\n";
        print "      </TR>\n";
    }
    print <<<EOM
      <TR>
        <TD>New Value</TD>
        <TD colspan="2"><INPUT size="32" type="text" maxlength="32" name="tb_newname"></TD>
      </TR>
      <TR>
        <TD colspan="3" align="center"><INPUT type="submit" name="btn_submit" value="実行"></TD>
      </TR>
    </TBODY>
  </TABLE>
EOM;
    task_after();                          // 後処理
    exit ;
}

//------------------------------
// レコード処理                 
//------------------------------
function execute() {
    //debug();                            // デバッグ表示
    $process = $GLOBALS["process"];
    $tb_addname = $GLOBALS["tb_addname"];
    $opt_del = $GLOBALS["opt_del"];
    $tb_newname = $GLOBALS["tb_newname"];
    $opt_upd = $GLOBALS["opt_upd"];
    switch($process){
    case 'insert':
        $sql = "insert into meibo.user values(NULL,\"$tb_addname\");";
        break;
    case 'delete':
        $sql = "delete from meibo.user where Num=$opt_del;";
        break;
    case 'update':
        $sql = "update meibo.user set Name=\"$tb_newname\" where Num=$opt_upd;";
        break;
    default: 
        error("処理モードが不正です。: $process");
        break;
    }
    DB_Connect();                          // Open Database
    DB_Execute($sql);                      // Execute Command
    mysql_free_result($GLOBALS["dbexe"]);  // コマンド実行終了
    DB_DisConnect();                       // Close Databse
    view();                                // 表示処理
}

//------------------------------
// 前処理                       
//------------------------------
function task_before() {
    Out_Header();                          // HTML ヘッダー表示
    DB_Connect();                          // Open Database
    $sql = "select Num,Name from user;";
    DB_Execute($sql);                      // Execute Command
}

//------------------------------
// 後処理                       
//------------------------------
function task_after() {
    mysql_free_result($GLOBALS["dbexe"]);  // コマンド実行終了
    DB_DisConnect();                       // Close Databse
    Out_Footer();                          // HTML フッター表示
}

//------------------------------
//  Decode                      
//------------------------------
function decode() {
    foreach($_GET as $key => $value) {
        $in[$key] = $value;
    }

    $GLOBALS["mode"] = $in['mode'];
    $GLOBALS["process"] = $in['process'];

    $GLOBALS["tb_addname"] = $in['tb_addname'];
    $GLOBALS["opt_del"] = $in['opt_del'];
    $GLOBALS["tb_newname"] = $in['tb_newname'];
    $GLOBALS["opt_upd"] = $in['opt_upd'];
}

//------------------------------
//  Connect Database            
//------------------------------
function DB_Connect() {
    // データベースアクセスの開始
    $GLOBALS["dbh"] = mysql_connect($GLOBALS["hostname"], $GLOBALS["dbusername"], $GLOBALS["dbpassword"])
    or die("データベースにアクセス出来ません。");
    // データベース選択
    mysql_select_db($GLOBALS["dbname"]);
}

//------------------------------
//  Execute Command             
//------------------------------
function DB_Execute($sql) {
    // コマンドの実行
    $GLOBALS["dbexe"] = mysql_query($sql, $GLOBALS["dbh"])
    or die("データベース処理コマンドを実行出来ませんでした。");
}

//------------------------------
//  DisConnect Database         
//------------------------------
function DB_DisConnect() {
    // データベースアクセスの終了
    mysql_close($GLOBALS["dbh"]);
}

//------------------------------
//  HTML Header                 
//------------------------------
function Out_Header() {
    $script=$GLOBALS["script"];
    print <<< EOM
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
  <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
  <TITLE>はじめての自宅サーバ構築 - データベース操作  〜 PHP編 〜 -</TITLE>
</HEAD>
<BODY>
  <CENTER>
    <a href="$script?mode=view">[表示モード]</a>
    <a href="$script?mode=disp_insert">[追加モード]</a>
    <a href="$script?mode=disp_delete">[削除モード]</a>
    <a href="$script?mode=disp_update">[更新モード]</a>
  <BR><BR>
EOM;
}

//------------------------------
//  HTML Footer                 
//------------------------------
function Out_Footer() {
    print <<<EOM
  </CENTER>
</BODY>
</HTML>
EOM;
}

//------------------------------
//  Out Error Message           
//------------------------------
function error($msg) {
    Out_Header();                          // HTML ヘッダー表示
    print "<H2>$msg</H2>\n";
    Out_Footer();                          // HTML フッター表示
    exit ;
}

//------------------------------
//  デバッグ表示                
//------------------------------
function debug() {
    Out_Header();                         // HTML ヘッダー表示
    $mode = $GLOBALS["mode"];
    $process = $GLOBALS["process"];
    $tb_addname = $GLOBALS["tb_addname"];
    $opt_del = $GLOBALS["opt_del"];
    $tb_newname = $GLOBALS["tb_newname"];
    $opt_upd = $GLOBALS["opt_upd"];

    print <<<EOM
  <TABLE border="1" cellspacing="1">
    <TBODY>
      <TR bgcolor="#0080ff">
        <TH>Property</TH>
        <TH>Value</TH>
      </TR>
      <TR>
        <TD>mode</TD>
        <TD>$mode</TD>
      </TR>
      <TR>
        <TD>process</TD>
        <TD>$process</TD>
      </TR>
      <TR>
        <TD>tb_addname</TD>
        <TD>$tb_addname</TD>
      </TR>
      <TR>
        <TD>opt_del</TD>
        <TD>$opt_del</TD>
      </TR>
      <TR>
        <TD>opt_upd</TD>
        <TD>$opt_upd</TD>
      </TR>
      <TR>
        <TD>tb_newname</TD>
        <TD>$tb_newname</TD>
      </TR>
    </TBODY>
  </TABLE>
EOM;
    Out_Footer();                          // HTML フッター表示
    exit ;
}

?>

作成したスクリプトの所有者変更

所有者の変更
# chown apache:apache /var/www/html/OperatedMySQL.php

■ サンプルスクリプトの起動

ブラウザより『http://サーバのアドレス/OperatedMySQL.php』でアクセスする。
下記の様な画面が表示されるので、「追加・削除・更新」等を行ってみて下さい。

■ コンテンツ関連

■ その他

ページ先頭へ

Copyright(©)2004-2018 First home server construction. All Right Reserved.