クロピグログ

職業訓練で学んだことまとめ

【DB授業四日目】MariaDB+PHP

MariaDB+PHP

作成手順

・まずエクセルで仮の表作ってみる

・必要な情報をとりあえずピックアップしていく

 

 

●仮のテーブル

商品名 価格 在庫 キーワード メーカー名 メーカー住所 メーカー電話
万年筆 19000 10 逸品 ペン工房 東京都 03-0000-0000
鉛筆 60 22 事務 小鳥文具 栃木県 028-111-1111
クレヨン 120 8 絵画 黒木屋 島根県 0853-55-5555
色鉛筆 200 15 絵画 黒木屋 島根県 0853-55-5555

 

・重複する値がでてきた場合は別テーブルで管理することを検討

・今回はメーカーの情報は別テーブル管理がよさそう

 

●文房具管理用のテーブル名:stationery

商品名 価格 在庫 キーワード メーカー番号
万年筆 19000 10 逸品 1
鉛筆 60 22 事務 2
クレヨン 120 8 絵画 3
色鉛筆 200 15 絵画 3

 

●メーカー管理用のテーブル名:trader

メーカー番号 メーカー名 メーカー住所 メーカー電話
1 ペン工房 東京都 03-0000-0000
2 小鳥文具 栃木県 028-111-1111
3 黒木屋 島根県 0853-55-5555

 

・フィール名、データ型、属性を決める

 

f:id:chromiumpig:20200928112110p:plain

※電話番号のデータ型:「-」ハイフンは文字列型なので「CHAR」を採用

 

VScodeスクリプトファイルを作成する

#すでにデータベース領域ある場合削除
IFがないと「practice」がない場合エラーになる
DROP DATABASE IF EXISTS practice;
#データベースの領域
CREATE DATABASE practice;
#データベースの領域選択
USE practice;
#stationeryテーブルの作成
CREATE TABLE stationery(
  id INT PRIMARY KEY AUTO_INCREMENT,
  item CHAR(10),
  price INT,
  stock INT DEFAULT 0,
  keyword TEXT,
  maker INT
);
#stationeryテーブルにレコード挿入
INSERT INTO stationery (item, price, stock, keyword, maker) VALUES
('万年筆'1900010'逸品'1),
('鉛筆'6022'事務'2),
('クレヨン'1208'絵画'3),
('色鉛筆'20015'絵画'3),
('消しゴム'9026'事務'2),
('コンパス'1600'事務'1);
#traderテーブルの作成
CREATE TABLE trader(
  m_id INT PRIMARY KEY AUTO_INCREMENT,
  company CHAR(10),
  address TEXT,
  tel CHAR(13)
);
#traderテーブルにレコード挿入
INSERT INTO trader (company, address, tel) VALUES
('ペン工房''東京都''03-0000-0000'),
('小鳥文具''栃木県''028-111-1111'),
('黒木屋''島根県''0853-55-5555');

 

●コマンドプロントにスクリプトファイル読み込ませる

※コマンドプロントの色変えるときは  「cls」記述すると開き直す

 

1. ユーザ名とパスワードを指定してMySQLにログイン

mysql -u root -p

 

2. スクリプトファイル読み込ませる

\. C:\Users\ica\Desktop\xampp\htdocs\DB講座\dbsample\practice.sql

 

 

●「root」ユーザのままだとよくないのでユーザ作成する

#ユーザの作成
GRANT ALL
ON practice.*
TO Tanaka@localhost
IDENTIFIED BY 'Manager';

・ユーザ確認用

SELECT user, host FROM mysql.user;

・ユーザ詳細確認用

SHOW GRANTS FOR Tanaka@localhost;

 

■データベースに接続する手順(コマンドプロント)

1. ユーザ名とパスワードを指定してMySQLにログイン

mysql -u root -p

 

2. データベース領域の選択

USE practtice

 

-------ここまでが接続----------

 

3. テーブルの表示

SELECT * FROM stationery;

 

レコードを取得する

mysql → mysqli

・昔の書き方を上書きしないように苦肉の策で「i」がついた

f:id:chromiumpig:20200928155458p:plain

●select_test.php

・mysqli_connect:DB接続用関数

$dbobj = mysqli_connect('localhost''Tanaka''Manager')
  or die(mysqli_error($dbobj));

 

第1引数:DBサーバの場所

第2引数:ユーザ名

第3引数:パスワード

戻り値:接続OK → 接続情報をもつオブジェクト

接続NG → false

 

・mysqli_select_db:DB領域選択

mysqli_select_db($dbobj'practice');

USE practice と同じ処理

第1引数:DB接続許可証(オブジェクト)

第2引数:選択するDB領域

 

 

・mysqli_set_charset:文字コード変換

mysqli_set_charset($dbobj'utf8');

もしPHPとDBで文字コードが違う場合にPHP側がUTF8を使っていることを知らせる

文字コードPHPとDBで揃っていればなくてもOK

▲▲▲▲▲▲ここまでDB接続処理▲▲▲▲▲▲

 

・mysqli_query:SQL文をDBに渡す関数

$resultSet = mysqli_query($dbobj'SELECT * FROM stationery')
  or die(mysqli_error($dbobj));

第1引数:DB接続許可証(オブジェクト)

第2引数:SQL文(SELECT文)

戻り値:SELECT文の結果のテーブル情報

テーブル情報を変数resultSetに代入

・降順にしたいときは「ORDER BY id DESC」など使う

$resultSet = mysqli_query($dbobj'SELECT * FROM stationery ORDER BY id DESC'
  or die(mysqli_error($dbobj));

 

・mysqli_fetch_assoc:DBから取得した外部リソースを連想配列に変換する関数

$data = mysqli_fetch_assoc($resultSet);
echo $data['item'];

第1引数:連想配列に変換する外部リソース

戻り値:ポインタ位置のレコードを連想配列にして返す

戻り値の連想配列を変数dataに代入

・item全部表示するとき

while ($data = mysqli_fetch_assoc($resultSet)) {
 
   echo $data['item'];
 
   echo '<br>';
 }

mysqli_fetch_assoc関数の結果を変数dataに代入

代入された変数dataを繰り返し条件の判定に使用

変数dataに連想配列があれば「true」

変数dataにNULLが入っていた場合は「false」

 

テキストの関数の説明

戻り値の型 関数名 ( 型 引数型 引数, ..... )

テキストの書き方でもこうなってるが

関数名 ( 型 引数型 引数, ..... ):戻り値の型

最近はこうなってることが多い