🦁

DB(PHP)

2021/07/15に公開

エラーログの場所
C:\xampp\mysql\data mysql_error.log
xamppのmysqlのディレクトリの場所
C:\xampp\mysql\bin

パスワード設定
C:\Users\user>mysqladmin -u root password

今回のパスワードはroot

ログイン
mysql -u root -p

databaseのDB確認
show databases;

DB作成 selfphpを
create database selfphp character set utf8;

DBを使う  use selfphp;
      ログイン前だったら、mysql -u root -p selfphp

データベースアクセス用の新規ユーザを設定する 管理者用だとセキュリティ状好ましくない
selfpassユーザを作成
GRANT ALL PRIVILEGES ON selfphp.* TO 'selfpass';

テーブル作成 memberテーブル
       今回の内容が、id int 会員ID(主キー)
          nam varchar(255) 氏名
     sex char(1) 性別(デフォルト男)
old int 年齢
enter date 入会日
memo varchar(255) 備考

create table member(id int primary key auto_increment, nam varchar(255) not null,sex char(1) default'男',old int not null,enter date not null,memo varchar(255) default null);

テーブル作成ができたら、show tables;

テーブルの構成を確認
show fields from member;

データを挿入
insert into member(id ,nam ,sex,old,enter,memo) values(1,'inu','男',20,'2021-03-01',null);

select文
挿入したデータの内容を表示する
select * from member;

特定の情報を取り出す memberテーブルのoldとnam
select nam ,old from member;

性別が男でかつ備考が空ではない
select nam,sex,memo from member where sex='男' and memo is not null;

年齢(old列が21以上の会員だけとりだす
select nam ,old from member where old >=21;

年齢について上順で、会員コードについて降順で並べた場合
select id , nam , old from member order by old, id desc;

update テーブル情報更新
メンバーテーブルの会員コード(id列)が1のレコードの年齢(old列)を21に更新する。
update member set old =21 where id =1;

delete 削除
メンバーテーブルの会員コード(id列)が1のものを削除する。
delete from member where id=1;

カラムが足りなくなったら
alter table テーブル名 add (新規カラム名 date)
例 alter table book add (published date)
参考
https://uxmilk.jp/12612

主な比較演算子
= 等しいnam='鈴木',

より大きい(old>21),
 old<21(より小さい),
=以上old>=21,
<= 以下 old<=30,
<> !=等しくない nam <> '鈴木'
is[not]null である(でない) memo is null,
[not]like 指定パターンに含まれる(含まれない) old between 25 and 35
[not]in 候補地のいずれかである(いずれでもない) old in(20,30,40)

参考文
is not null 半角スベースあける
order by   半角スペース開ける

and使い方
・memberテーブルからnam,sex,memoをとってきて、その中の男性、memoがからではないもの
select nam , sex , memo from member where sex ='男' and memo is not null;

or使い方
・memberテーブルからnam,sex,memoをとってきて、その中の男性または、memoがからではない
select nam,sex,memo from member where sex='男' or memo is not null;

order by 並び変え、ASC〈昇順)DESCが降順
・年齢について昇順で,会員コードについて降順で並べ変えた場合
select id ,nam ,old from member order by old , id desc;

データ集計 グループ化 Groupby
集計関数
AVG(平均)count(件数)MAX(最大化) MIN(最小化) SUM(合計)
・年齢(old)の平均をだす(AVG)
select nam,avg(old) from member group by sex;

関数を使った後は別名をつけるのが、一般的です。どうするか?ASを使う
今回はold_avgという名前を付ける
select sex,AVG(old) AS old_avg from member group by sex;

注意・・select * from member;で検索してもold_avgテーブル名は出てこない。

例外処理
https://www.php.net/manual/ja/language.exceptions.php
メソッド一覧
https://www.php.net/manual/ja/class.exception.php
try ctach finally

try{
例外が発生する可能性があるコード
}catch(発生するかもしれない例外の種類 例外を受け取る変数){
例外発生時の処理
}finally{
例外有無でも実行する
}

phpからDB接続

$dsnでDB名に接続 $usr ユーザ名 $password でパスワード DBを作った後に、権限を作成
適当な変数に入れて、DBを取得

$db =getDb(); //接続確認する
<?php
function getDb() //DBのテーブル、ユーザ名 パスワードをいれる
{
$dsn = 'mysql:dbname=selfphp; host=localhost; charset=utf8';
$usr = 'selfusr';
$passwd = 'root';

db = new PDO(dsn, $usr, $passwd);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// db = new PDO(dsn, $usr, $passwd, [PDO::ATTR_PERSISTENT => true);
return $db;
}

feach セットから個々の行を取り出す事をfeachするという。結果をセットする

https://www.php.net/manual/ja/pdostatement.fetch.php

トランザクションとは、複数の処理をグループ化する事。トランザクションの処理を確定する事をcommitするという
トランザクションの処理を戻す事をロールバックという

トランザクションとロールバックを使ったサンプルコード
https://blog.tokumaru.org/2015/05/blog-post.html

DBを消す。
DROP DATABASE [IF EXISTS] db_name;

データベースから特定のデータを取得する
参考
https://blog.senseshare.jp/fetch-mode.html
fetch(PDO::FETCH_ASSOC);

Discussion