LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

LAMP 4. M for MySQL - 2

Last updated at Posted at 2017-11-07

phpMyAdminのインストール

phpMyAdminピーエイチピーマイアドミン)はMySQLサーバーをウェブブラウザで管理するためのデータベース接続クライアントツールで、PHPで実装されている。phpMyAdminを用いることで、SQL文を記述することなく、MySQLのデータベースに対して様々な操作が行える。また、ユーザが任意のSQL文を記述して実行することもできる。

# yum -y install --enablerepo=epel install -y phpMyAdmin php-mysql php-mcrypt

# cd /etc/httpd/conf.d/
# ls -al
-rw-r--r-- 1 root root 1779 Jun 26 09:04 phpMyAdmin.conf

# cp -p phpMyAdmin.conf phpMyAdmin.conf.dist
# ls -al
-rw-r--r-- 1 root root 1779 Jun 26 09:04 phpMyAdmin.conf
-rw-r--r-- 1 root root 1779 Jun 26 09:04 phpMyAdmin.conf.dist

Apacheの設定ファイル

Apacheは、httpd.confというテキストファイルに「ディレクティブ(命令、コマンドの意)」と呼ばれる専用の命令を記述することで設定します。

# less /etc/httpd/conf/httpd.conf

設定ファイルの構文

Apache設定ファイルの構文は単純で、1行に1つのディレクティブから構成されています。はじめにディレクティブを記述し、空白に続いてディレクティブに与える設定値を記述するだけです。
(例:DocumentRoot /var/www)

ディレクティブは基本的に大文字と小文字は区別しません。ただし、UNIX系OSでのファイル名やディレクトリ名については大文字と小文字が区別されます。また、「#」ではじまる行はコメントとして無視されます。また、ディレクティブの前の空白は無視されるので、設定をわかりやすくするためのインデントが可能です。

設定の有効範囲

設定ファイル中のディレクティブは、「全体の設定」と「範囲を指定(特定のディレクトリやファイル、URLのみに適用)した設定」の2種類があります。この範囲のことを「セッションコンテナ」といいます。

Apache標準のセッションコンテナにはディレクトリを示す<Directory>や、ファイルを示す<Files>、URLを示す<Location>などがあります。

phpMyAdminの設定

/etc/httpd/conf.d/にも設定ファイルを置くことができる。以下のディレクティブを追加することで(パスワードを知っている)誰でもphpMyAdminにログインできる(危険なので本番サーバではこういった設定はしない)。

# vi /etc/httpd/conf.d/phpMyAdmin.conf

<Directory /usr/share/phpMyAdmin/>

  AllowOverride all
  Require all granted
</Directory>

設定を変更したらApacheを再起動する
# apachectl restart

CSVなどのファイルからデータを取り込む

サンプルデータ:todofuken.csv

クエリの一般書式は
load data infile "xxx.txt" into talbe テーブル名;

  • Excel等の他のアプリケーションで作ったデータは、一度取り込めば終わり(以降はWebアプリケーションから操作するため)の場合が多いが、取り込み中にやり直しが発生したり、失敗することも多い。レコードやテーブルを削除するのは、コマンドラインよりGUIが便利
  • クエリで書いて取り込む場合は、ファイルの下ごしらえ(文字・改行コード調整、デリミタ等々)が結構手間がかかる

なのでphpMyAdminでインポートするのが楽

レコード選択のいろいろ(SELECT文 その2)

選択結果を並び替える

# 基本構文:select * from order by フィールド名;

SELECT * FROM `都道府県` order by `県名`

数値フィールドの並べ替え

SELECT * FROM `都道府県` ORDER BY `都道府県`.`面積` DESC;

# DESCで降順

ベスト10を表示する

SELECT * FROM `都道府県` ORDER by `面積` DESC LIMIT 10;

フィールド間の計算結果で並べ替え

SELECT `県名`,`人口`,`面積`, `人口`/`面積` as '人口密度' FROM `都道府県` ORDER by `人口密度` LIMIT 10;

レコードに連番を振る

重複レコードを作らない

全てのフィールドが同一のレコードを作ることができてしまうと、特定のレコードを削除できないなど不都合が生じる。
Web画面から登録ボタンを2回クリックするなどしても「全く同じ内容のレコードは作れないようにする」ことが必要。MySQLにはレコードに連番を振る機能がある

連番を振る - インデックスの付加

  1. 連番を入れるフィールドを作る(構造タブ:1個のカラムを追加する→フィールド名(例):id、データ型:int、最後のカラムに作成)
  2. 「インデックス」をクリックしてテーブルにインデックスを付加する
  3. 「変更」をクリックして、連番フィールドをAUTO_INCREMENT属性に変更する
  4. 下記のクエリを何回か実行して、連番が振られることを確認
INSERT INTO `都道府県` values (0, 'hoge', 'hoge', 100, 100);

PHPからMySQLを操作する

Webアプリケーションとは

データベースを万人向けに扱えるようにしたものが多い

HTMLの基礎構造

(HTML 4.01)
ドキュメント宣言部分
HTML部分

テンプレート

HTML5の基本的なテンプレート

<!DOCTYPE html>

<html lang="ja">
<head>
  <meta charset="utf-8">

  <title>HTML5 Template</title>
  <meta name="description" content="HTML5 Template">

  <link rel="stylesheet" href="css/styles.css?v=1.0">

</head>

<body>
  <script src="js/scripts.js"></script>
</body>
</html>

<head>のセクションの最初の行は、文書の文字エンコードを指定します。ブラウザーが確実に文字エンコードを正しく読み込むようにするには、すべての文字エンコード宣言をHTML文書の最初の512文字内に含める必要があります。コンテンツベースの要素(たとえば例の<title>要素)の前に置く必要があります。

<script>要素はページの一番下に配置しています。これはページのローディングのスピードに関係してくるためです。ブラウザーはスクリプトを読み込んだ場合、スクリプトの解析を優先しようとします。大きなスクリプトがコンテンツの冒頭にあった場合、ページのローディングスピードが遅くなります。それを避けるため、ページのローディングが終わってからスクリプト解析が始まるように、スクリプト系はコードの最後にします。

しかし、ブラウザーがページを表示する前にスクリプトを読み込ませたい場合など、場合によってはスクリプトを冒頭に置かなければならない場合もあります。

PHPスクリプトの組み込み

基本のルールは2つ

** PHPスクリプトの部分を<?php ?>というタグで囲む
** 拡張子を「.php」にして保存する

<p>
<?php
echo date("r");
?>
</p>

(基本の1行スクリプト:date())

# cd /var/www/html/
# vi index.php

<!DOCTYPE html>

<html lang="ja">
<head>
  <meta charset="utf-8">

  <title>HTML5 Template</title>
  <meta name="description" content="HTML5 Template">

  <link rel="stylesheet" href="css/styles.css?v=1.0">

</head>

<body>
<p>
<?php
echo date();
?>
</p>

</body>

PHPとHTMLのどちらの制御下にあるかを考える

エラーになる書き方

<p>
<?php
echo date("r");
<br>
echo date("Y/m/d H:i:s");
?>
</p>

解決方法 1

<p>
<?php
echo date("r");
?>
<br>
<?php
echo date("Y/m/d H:i:s");
?>
</p>

解決方法 2

<p>
<?php
echo date("r");
echo "<br>";
echo date("Y/m/d H:i:s");
?>
</p>
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up