PHP : mysqli を使用した単純な問合せアプリケーション

ダウンロード

▼ デモページ

データベースの接続に必要な値は、include_path に設定されたディレクトリに config.php を作成してセットします

▼ config.php
<?php
$host = "MySQLサーバ";
$user = "ユーザ";
$pass = "パスワード";
$db = "データベース";
?>

control.php ( エントリポイント )

01.<?php
02.# ***************************
03.# ソースベースの取り込み
04.# ***************************
05.require_once('settings.php');
06.require_once('model.php');
07.require_once('config.php');
08. 
09.# ***************************
10.# MySQL 接続
11.# ***************************
12.$con = @new mysqli($host, $user, $pass, $db);
13.$con->set_charset("utf8");
14. 
15.# ***************************
16.# MySQL 用特殊文字エスケープ
17.# ***************************
18.foreach( $_REQUEST as $key => $value ) {
19.        $_REQUEST["db"][$key] = $con->real_escape_string($value);
20.}
21. 
22.# ***************************
23.# テーブル表示
24.# ***************************
25.build_table($con);
26. 
27.# ***************************
28.# MySQL 接続解除
29.# ***************************
30.$con->close();
31. 
32.# ***************************
33.# 画面定義
34.# ***************************
35.require_once('view.php');
36.?>


view.php ( 画面定義 )

01.<?php
02.# **************************************
03.# js キャッシュ用
04.# **************************************
05.$tm = mktime();
06. 
07.# **************************************
08.# 画面定義
09.# ( Ruby や Python に合わせた画面形式 )
10.# **************************************
11.$out_client = <<<HTML
12.<!DOCTYPE html>
13.<html>
14.<head>
15.<meta charset="utf-8">
16.<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
17.<title>MySQL 問合せ</title>
18. 
19.<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
20.<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css" />
21. 
22.<script src="entry.js?{$tm}"></script>
23. 
24.<style>
25.body {
26.        margin: 0;
27.}
28. 
29.#main {
30.        padding: 0px 16px 3px 16px;
31.}
32. 
33.</style>
34.</head>
35.<body>
36.<div class="alert alert-dark">
37.        簡易タイトル
38.</div>
39.<div id="main" class="table-responsive">
40. 
41.        <table class="table table-hover">
42.        {$GLOBALS['table']}
43.        </table>
44. 
45.</div>
46.</body>
47.</html>
48.HTML;
49. 
50.print $out_client;
51. 
52. 
53.?>

model.php ( HTML 作成部分 )
01.<?php
02.# ***************************
03.# モデル用関数を定義する
04.# ***************************
05. 
06.# ***************************
07.# テーブル表示
08.# ***************************
09.function build_table($con) {
10. 
11.        // デバッグ用
12.        file_put_contents("debug.log", "build_table:開始\n" , FILE_APPEND );
13.        file_put_contents("debug.log", print_r( $con ,true ) , FILE_APPEND );
14. 
15.        // TR 内の HTML 文字列
16.        $lines = "";
17.        $sql= <<<SQL
18.                select
19.                        社員コード,
20.                        氏名,
21.                        フリガナ,
22.                        所属,
23.                        性別,
24.                        作成日,
25.                        更新日,
26.                        給与,
27.                        手当,
28.                        管理者,
29.                        DATE_FORMAT(生年月日,'%Y/%m/%d') as 生年月日
30.                from 社員マスタ
31.                where 氏名 like '%{$_REQUEST["db"]["nm"]}%'
32.SQL;
33. 
34.        $rs = $con->query($sql);     // エラー処理省略(本当は必要)
35.        //  デバッグ用
36.        file_put_contents("debug.log", print_r( $rs ,true ) , FILE_APPEND );
37. 
38.        // 列情報を取得( タイトル用 )
39.        $fields_data = $rs->fetch_fields();
40.        foreach( $fields_data as $field ){
41.                $lines .= "<th>{$field->name}</th>";
42.        }
43. 
44.        // 列データを取得
45.        while( $row = $rs->fetch_array(MYSQLI_BOTH) ) {
46.         
47.                $cells  = "";
48.                for( $i = 0; $i < $rs->field_count; $i++ ) {
49.                        $cells .= "<td>{$row[$i]}</td>";
50.                }
51.         
52.                $lines .= "<tr>{$cells}</tr>" . "\n";
53.        }
54. 
55.        // 埋め込み用グローバル変数へセット    
56.        $GLOBALS['table'] = $lines;
57. 
58.        //  デバッグ用
59.        file_put_contents("debug.log", "build_table:終了\n" , FILE_APPEND );
60. 
61.}
62. 
63. 
64.?>

settings.php ( 共通設定 )
01.<?php
02.// ***************************
03.// 共通処理( UTF8N で保存 )
04.// ***************************
05.error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT );
06.ini_set('display_errors', '1');
07.ini_set('date.timezone', 'Asia/Tokyo');
08.ini_set('default_charset', 'utf-8');
09.session_cache_limiter('nocache');
10.session_start();
11.header( "Content-Type: text/html; charset=utf-8" );
12. 
13. 
14.foreach( $_REQUEST as $key => $value ) {
15. 
16.# ここで $_REQUEST 内の文字列のセキュリティ上の処理
17. 
18.}
19. 
20.# デバッグログの初期化
21.file_put_contents("debug.log", "開始\n" );
22. 
23.# メッセージ
24.$check_message = "";
25. 
26.# クライアントコントロール
27.$pass = "1";
28.?>