ステップアップ備忘録

学習用備忘録

MySQLについて ⑤

サブクエリ

一時的にしか使わないテーブルの置き換え

情報を取得するための一時的なテーブルで、処理が終われば破棄される

元の内容に別名を付けて、それを参照させる

元の内容

from(処理内容)as 別名

 

select sum(別名.カラム名)

元の処理内容の名前

from(処理内容)as 元の内容の別名

group by 元の処理内容の名前

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

viewで抽出条件を保存

create view as viewの名前 as select * from テーブル名 order by 条件

viewを消す

drop view

viewはテーブルと同じ扱い、show tables;で表示される

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

トランザクション

ある処理をする際にその処理が実行されることを保証する

start tansaction;

~commit

この二つの分を処理の前と後ろに入れる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

索引

データ抽出の短縮が可能

add indexで指定。

alter テーブル名 add index index_カラム名

explain → 索引の中身を検索

drop index → 索引の削除

show index → 索引の表示

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

複数のテーブルの紐づけ

inner joinとouter join

inner join → 共通する項目の取得

outer join → 共通しない項目も含めて取得

 

inner join

構文 select * from テーブル名1 join テーブル名2

   on テーブル名1の項目 = テーブル名2の項目

特定のフィールドのみの取得

selectの後にテーブル名.フィールド名とする

 

outer join

片方だけのデータでも取得する

left join → 左側に書いたテーブルを軸にする

right join → 右側に書いたテーブルを軸にする

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

外部キー制約

データの整合性を保つ

制約に使いたいデータについてはデータの型を合わせておく

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

torriger

何らかの変更を加えた際に指定の処理を行うようにする

create triggerでトリガーを作成する

begin ~ end で複数のトリガーを指定できる

この際にdelimiter(応用文字)を使うことを忘れない。(;に対して)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

日時の管理・計算

created date time → 作成日時の管理

updated date time → 更新日時の管理

update ~ set created ='日時の指定' → 更新日時を指定

select * from ~ where created → 表示する条件の指定

select created ,date_add(created,interval 14day) → 作成日時に二週間足した日時の表示

select created data_format(created,'%w,%M, %Y) from テーブル名

→ 好きな書式を指定して表示ができる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データベースの書き出し

mysql_dumpを使ってバックアップをとる

\. ./バックアップファイルの名前でバックアップ時のファイルの書き出しが可能

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

○まとめ

一応一通りやってみた中で理論的にわからないことは見当たらない。

ただ、サブクエリの使い方については自分でいざ書いてみるとなると不安があるので、きちんと復習と0から作ってみることをしてみる。

 

MySQLについて ④

dotinstallのMySQL入門で学んだことの備忘録 続き

 

数値の演算

update users set score =score*1.2 where id % 2 = 0;

→ usersテーブルのスコアについてidが二で割り切れるものについてはスコアを1.2倍する

・組み込み関数の使用

round → 四捨五入

floor → 切り捨て

ceil → 繰り上げ

rand → 乱数の生成

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

文字列の演算

select length → 文字列の長さを返す

select substr → 文字列の一部を取り出す(substr = substring, 従属文字列)

        select substr('hello', 2, 3) → 二文字目以降の三文字を取り出しや

        select substr('hello', 2) → 二文字目以降を取り出しもできる

select upper(文字列) → 指定した文字を大文字にする

select lower(文字列) → 指定した文字を小文字にする

select concat(文字列, 文字列, 文字列…) → 指定した文字を連結させる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

enumを使用する

複数の文字列から1つだけを格納する

 rank enum (文字列1, 文字列2, 文字列3)

この( )内のどれかの値のみをrankの値として格納できるようになる

enum型に指定した以外の値の挿入は値が反映されない(エラーになる)

(これはMySQLのSTRICTのモード(厳密性に関わるモード)に関係する(?)

enum( )の中に指定した値には自動的に数値が割り当てられるので、それで指定してもOK。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

setを使用する

enum → 複数から1つを選ぶ

set → 複数の中でデータを2つ以上選択できる

カラム名 set (文字列1, 文字列2, 文字列3)

→カラムから複数選ぶ

もし入力時に文字列1と文字列2の順番を間違えても、create table内に記述した内容通りの順番に自動ソートされる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

if, caseを使う

select from 内に入れる

select カラム名 if(条件式) as カラムに別名を付ける 条件文 from テーブル名

select case when ~ then ~

whenの後ろに条件文、thenの後ろに処理を書く

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

抽出結果をテーブルにする

元あるcase文をテーブルにする

create table 新しいテーブル名 as → 新しいテーブルの定義

select

case文の中身

end as 処理内容に別名を付ける

from 元のテーブル名;

select * from 新しいテーブル名 → 新しいテーブル名でテーブルができているか表示

丸ごとコピーを作る

create table 新しいテーブル名 select * from 元のテーブル名

select * from 新しいテーブル名; → 新しいテーブル名でテーブルができているか表示

テーブルの構造のみコピー

create table 新しいテーブル名 like 元のテーブル名

desc 新しいテーブル名 -→ テーブル構造の確認

select 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データの集計処理

select ~ fromの中に

count → 個数を数える

sum → 合計値を計算

max → 最大値を表示

min → 最小値を表示

avg → 平均値を表示

destinct → ユニークな値のみ取り込む

count(distinct 値) → 重複しない値の数を数える

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

group by ~ having

select sum(選びたいカラム名) 処理内容 from テーブル名 group by 処理内容

カラム名について指定したテーブルから持ってきた処理内容の通りに処理した後に合計値を計算して順番に並べる

group by 並べたい項目 having sum(カラム名) > 10.0;

havingはwhere句と同じような意味を持つ

この場合並べたい項目をhaving以降の条件で並べる

whereを用いる際は where ~ group by ~となる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

○まとめ

今回は比較的使い方もわかりやすく迷うところは今のところないけれど、

自分で実際に0の状態から作るとなるとどこで引っかかるのかをしっかりつかみたい。

MySQLについて ③

dotinstallのMySQL入門を勉強した際の備忘録続き

 

テーブルの構造操作

alter句を使う

alter table テーブル名 add column カラム名 フィールドの型

→ フィールド(カラム)の追加

alter table テーブル名 drop column カラム名

→ フィールド(カラム)の削除

alter tabele テーブル名 change 古いフィールド名 新しいフィールド名 データ型

→ フィールドの名前とデータ型の変更

alter table 古いテーブル名 rename 新しいテーブル名

→ テーブルの名前の変更

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

・レコードの抽出

select where句を使う

select * from 抽出したいテーブル名 where 抽出条件

「 * 」→ すべての範囲

これはカラムやレコードの指定もできる

演算子の使用も可能 → <, >,  <=, >=, <>など

null値の指定は is null か is not null で指定

between → 指定範囲内を調べる

between 3.0 and 6.0など(float型の指定は.0を忘れない)

→ 3.0以上6.0以下と等しい

in → ( )内で指定された値のどれかを探す

   ( )内はカンマで区切る

・文字列を抽出条件にする

where 文字列 → 完全一致する文字列を探す場合

like 文字列 → 部分一致する文字列を探す、抽出したい部分をワイルドカードで指定

binary 文字列 → binaryは演算子の一つ、後ろに続く文字列を二進法の文字列に変換し、

         バイトごとで比較をする。

         バイトごとなので例えばaとAだと一致しない

_ (アンダーバー) → 任意の文字数を指定する

         間に任意の文字を含む場合、_で文字が何文字目かを指定し、

         後ろに%を付ける。

・抽出結果の並び替え、件数の制限

order by句 → 指定したテーブルの指定したフィールドについて照準に並び替える

null値ではない(もしくはnull値である)ものを指定したいときはorder byの前に記述

where カラム名 is not null order by カラム名 desc(降順に)

limit → 表示する件数を制限する、limit 3で上位3項目の表示

limit 数字 offset 数字 → offsetより後ろの数字の数だけ除外し、以降をlimit 数字で指定した数だけ表示する。

order by カラム名 limit 数字 → カラムの中からorder by で指定した条件で取り出し、

              limit以下の条件で並べる

              数字の後ろにdescをつけると降順、つけなければ昇順

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

レコードの更新と削除

更新

update テーブル名 set フィールド名 = 新しい値

→ フィールド名の中のすべての中身の値を更新する

条件付きで

update テーブル名 set フィールド名 = 新しい値 where 条件;

→ 条件に合致するフィールドの中身の値のみを更新

複数のフィールドを条件付きで

update テーブル名 set フィールド名1 = 新しい値, フィールド名2 = 新しい値

where 条件

条件に合致するフィールドの中身について、フィールド名1とフィールド名2の値を更新する

削除

delete from テーブル名; → テーブル名の中のすべてのレコードを削除

delete from テーブル名 where 条件 → テーブル名の中の条件に合致するレコードを削除

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

○ まとめ

まとめていて、今扱いたいのがレコードのことなのか、それともフィールドのことなのかがあいまいになってくる時がある。

レコードは行そのもので、フィールドはそれを構成している値のこと。

レコードをそのまま扱いたい場合は特にフィールドの名前を指定しないことに注意する。(deleteなど)

MySQLについて ②

dotintallのMySQL入門から勉強したことの備忘録

 

データ型

 ・種類

  int → 整数型

  float → 浮動小数点数、4バイト32ビット表示

  double → 浮動小数点数、8バイト64ビット表示

  unsigned → int unsignedのように用いる、符号部(±)を使わないので

         表現できる範囲が増える

         符号付き:127~-128の範囲

         符号なし:制限がない

  strings → 文字列型

  char() → 固定長の文字列データ

  varchar() → 可変長のデータ、()内に指定した範囲で文字数が変わる

  text → 長さ指定なし

  date → 日付

  time → 時間

  datetime → 日時

  true/false → 論理値(boolen)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

レコードの挿入

inset into テーブル名(指定したい項目) values (項目の中身(レコード);

→ 基本的な構文、レコードの挿入はテーブル単位で行う

 中身の文字列は「' '」シングルクォーテーションで囲む

これは次のようにも表記が可能

inset into テーブル名(指定したい項目) values

 (項目の中身(レコード),

(2つ目の項目の中身),

(3つ目の項目の中身);

カンマ区切りで併記、最後はセミコロンで終わる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データの中身を見る

select * from テーブル名;

→ テーブルの中身をすべて表示

「 * 」の部分はそれぞれの抜き出したい内容に変更可能

 

・データベースから一度抜け出した(quit;で)際にはユーザ名でのログイン後に

使うデータベースをuseでしっかり選ぶ。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

フィールドの制限

not null → 空の値にしない

default → 規定値を指定

unique → 重複させない

primary key → レコードを一意に特定できるフィールドに指定する(主キー)

         1つのレコードに対して1つ、nullではない+重複しない値

auto_increment → 自動連番する

desc_users; → フィールドに付与された情報を表示

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

○まとめ

データ型についてはC言語とほぼ同じなのでだいぶ覚えやすい。フィールドの制限の際にuniqueとprimary keyの使い方の違いが少しあいまいになる気がしたので、きちんと使い方の違いを調べておきたい。

MySQLについて ①

今回はdotinstallのMySQL入門について

 

まず、MySQLのインストール(過去記事(ローカル環境の構築-実践-)で既にインストール済み)

SQL → Structured Query Languaege(データベースへの問い合わせ言語)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

MySQLの操作方法

・端末で systemctl start mysqld.service と打ち込むとMySQLを起動できる

(パスワードは今回vagrantからの操作なのでvagrant)

・端末で mysql -u root -p

 → mysqlにパスワードを入力してルート権限で接続する

mysql> help; → ヘルプの表示

・ctrl + l → 画面のクリア

・↑ ↓(矢印キー) → コマンドの履歴の表示

・\q;(quit;) → MySQLの編集の終了

・\c → コマンドの強制終了

・ show ~; → show databases, show tablesというように使う

        MySQLサーバ内に置いてあるデータベースやテーブルを表示

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データベースの用語

database → 一つのアプリにつき一つ。大きな入れ物

table → 一つのアプリに何個も作れる。databaseの下で中間層的な役割

id → 管理番号

title → 見出し

body → 中身

record/row → table内の行を表す

filed/coulmn→ recordを構成する値

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

show databases; で表示したデータベースについて

information _schema,

mysql,

perfomance_schema

この3つはシステム側で管理しているデータベースなので間違って消したり、編集したりしてはいけない

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データベース, テーブルの操作

create句 → データベースやテーブルの作成(ユーザも作れる)

drop句    → データベースやテーブルの削除(ユーザも削除できる)

select句  → 選択しているデータベース, テーブルの表示(ユーザも表示可能)

use句   → 使用するデータベースの選択

・コマンドは大文字と小文字を区別しない

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

userの作成

rootユーザには多く権限が与えられているため、開発の際にはデータベースごとの作業ユーザを作成する

create user ユーザ名@localhost identified by 'パスワード'

→ パスワード付きユーザの作成

grant all on データベース名.* to ユーザ名@localhost;

→ 特定のデータベースに対して指定したユーザに全権限を与える

これを併せて記載できる

grant all on データベース名.* to ユーザ名@localhost identified by 'パスワード';

・grant句は権限を管理する、allではなく別の記載をする際もある。

select host, user password from mysql.users;

→サーバ内に存在するユーザの一覧確認

show grants for ユーザ名@ホスト名;

特定のユーザに与えられている権限の表示

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

データベースの存在チェック

if exists → もし存在する場合

drop database if exists データベース名;

→ 指定したデータベース名でデータベースが存在する場合、削除する

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

コメントの設定

-- , // → 1行に対してコメントを設定

/* */ → /* で始めて複数行をコメント指定 */ で終わる

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

○まとめ

今回勉強しながら実際に打ち込みをしてみて、文のつづりや単語、パスワードの入力で覚束ない部分があるのでそれを気を付けたい。

 

PHPの勉強 ⑤

PHPでプログラムを書く(dotinstall)

環境はローカル開発環境で行っている

プログラムの流れ(ビンゴカードを作る)

まずはvagrantを立ち上げ、SSHで接続、ファイル転送ツールからファイルを作成

HTMLの構文<!DOCTYPE>~</html>までを最初に記入。

<meta>要素で文字コードを設定後に、タイトルを設定する。
<div id ="container">→中央ぞろえに設定
<tr> →tableを作成
<th> →tableheaderを設定
<td> → table dataを設定
<td>1</td>→値の1は仮。後でプログラムで自動生成し、ランダムに表示する。
</div>

一度ビルトインサーバで確認してみる。

次にCSS(各タグ項目のスタイル)を調整
HTML本文中に
<link rel="stylesheet" href="名前.css>
を記述。</head>の前に。

ファイル転送ツールからcssを作成。

スタイルシートを定義
(色は若ならなければ見本がある)

次に配列を生成(配列数は[0]~[4]の5つ)

<?php
$nums = ; →配列の定義
for($i = 0; $i < 5; $i++){ →初期値を0として、$iの値が5より小さい間ループする。
 $col = range($i*15+1, $i*15+15);←配列を生成
 shufful($col); 生成した配列をシャッフルする
 $nums[i] = array_slice($col,0,5); →シャッフルした数字をランダムに選ぶ

}

function h($s){ return htmlspecialchars($s, ENT_QUOTES,'UTF-8'); }←エスケープ関数

}

$numsは配列の配列なので2重ループを設定する。

<?php for($i = 0; $i < 5; $i++; ?>

<tr>
</tr>
<?php endfor; ?>

<?php for($j = 0; $j < 5; $i++; ?>

<td>

</td>

<?php endfor; ?>

<td>1</td> → <td>$nums</td>に

最後に
<?php
$nums = ; →配列の定義
for($i = 0; $i < 5; $i++){ →初期値を0として、$iの値が5より小さい間ループする。
 $col = range($i*15+1, $i*15+15);←配列を生成
 shufful($col); 生成した配列をシャッフルする
 $nums[i] = array_slice($col,0,5); →シャッフルした数字をランダムに選ぶ

}

$nums[2][2]="FREE";→配列[2][2]のところFREEに変えて固定する。


function h($s){ return htmlspecialchars($s, ENT_QUOTES,'UTF-8'); }←エスケープ関数

}

を入れる。

・オブジェクト指向での組み換え
前のHTML文に書き込んだPHPを用いて、オブジェクト指向で組み替える(ファイルも分割する)

<?php require_once(__DIR__,'/config.php');←config.php(設定ファイル)をよみこんでディレクトリへ
require_once(__DIR__,'/Bingo.php');←Bingo.php(実際の処理に関するファイル)を読み込んでディレクトリへ
   $bingo = new MyApp\Bingo\();←名前空間の設定
   $nums = $bigo -> create();クリエイトメソッドにまとめる
?>

config.php
<?php
ini_set('display_errors, 1);→エラーを画面に表示する。ini_setは設定したオプションの値を設定する。
require_once(__DIR__,'/functions.php')→function.phpを読み込み
?>

function.php

<?php
function h($s){ return htmlspecialchars($s, ENT_QUOTES,'UTF-8');} ?>

HTML文書の中に書いたエスケープ関数を持ってくる。

Bingo.php

<?php

namespace MyApp;

class Bingo {

public function create(){

$nums = []; →配列の定義
for($i = 0; $i < 5; $i++){ →初期値を0として、$iの値が5より小さい間ループする。
 $col = range($i*15+1, $i*15+15);←配列を生成
 shufful($col); 生成した配列をシャッフルする
 $nums[i] = array_slice($col,0,5); →シャッフルした数字をランダムに選ぶ

}

$nums[2][2]="FREE";→配列[2][2]のところFREEに変えて固定する。

return $nums;→$numsの値を返す。

}

まとめ

一度HTMLで作成後にそれぞれがどのような動きをするものかを考えてからファイルを分けていくと、最初はわかりやすいかもしれない。

PHPの勉強 ④

今回はdotinstallのPHP入門についてをまとめます。

わかったこと

PHPのプログラムを試しに実行したい場合
 ビルトインwebサーバを使う。
 まずip -aコマンドでローカル環境のIPアドレスを確認する。
 PHP -s 確認したIPアドレス:ポート番号でビルトインwebサーバにアクセス。
 終了時はctrl+cでサーバを終了できる。

・変数→データにつけるラベルのこと
 
・データ型
 文字列→string
 数値→integer(整数)/float(少数)
 論理値(真偽値)→true,fales
 配列
 オブジェクト

・var_dump→変数のデータ型と値を返す。他に今いる行やファイル名、ディレクトリ名を表示できる。(__LINE__)など

・定数→変更されない値につけるラベルで、defineを用いる。

演算子→**(べき乗), 単項演算子(1を足す演算子で++や--のこと)

・文字列の「" "」と「' '」の違い
 「" "」→特殊文字と認識、変数の展開
 「' '」→文字列としてのみ認識、↑のようなことはできない。

・if文の省略
$max = ($a > $b)?$a:$b;

これは

if($a >$b){
$max=$a;
}else{
$max = $b;
}

・switch文
変数がとりうる値がいくつか決まっているとき、それに対して処理を振り分ける。
caseを使って処理を分岐

・while文とfor文の違い
whileもforもループ処理を行うが、
forは繰り返す回数があらかじめはっきりしている
whileは繰り返す回数がはっきりしていない(無限ループが起こりうる)

例でいうと、煮込み料理をする際、煮込み時間がはっきりしているかいないかのようなもの。

・コロン構文(配列)
foreach(条件):
処理内容;
endforeach;
コロン構文はHTMLに直接埋め込むなどの際に便利
構文の形で(while,forなど)でendから後ろは変わる。

・関数を作る
引数→関数を引き出す時に渡す値のこと
関数の中身を定義→function 関数名($引数)→echo "$引数";

Outputname("山田")→関数の中身を定義
function Outputname($name)→Outputnameという関数を定義
echo '$name'; →$nameという引数から関数を引き出す。

・ローカル変数
関数内で定義した変数→その関数内でのみ有効


$name = "nakata";

public function userName($name){
echo '$name = "shimizu";
}

var_dump($name);

最初に$nameにnakataという値を代入し、次にuserName関数を定義し、そこに$name= "shimizu"と入力したとする。
関数の外で$nameの中身を確認すると、結果はnakataが出てくる。
関数内での変更は関数内のみでしか適用されない。

・組み込み関数
小数点以下に関する組み込み関数
ceil→切り上げ
floor→切り捨て
round→四捨五入
rand→乱数の作成
strlen→マルチバイトの文字の文字数を取得
printf→printf("%s -%s -%f, $s1,$s2,$x")のようにして、出力する。
count→配列の要素数を数える。
implode→配列の要素数を区切り文字で連結し、文字列で返す。

・継承
前に作ってあるクラスのプロパティやメソッドの構造を保持しつつ別のクラスを作成

 オーバーライド→親クラスのメソッドやプロパティを上書きできる。メソッドやプロパティの定義の際にfainalを付けることで禁止もできる。
         fainal public function ~というように
・アクセス権
praivat→クラス内でのみアクセス可能
protected→そのクラスと親子クラスからのみアクセス可能
public→どこからでもアクセス可能

・staticについて
通常だとメンバ($tom = newUser("Tom")とインスタンスを生成した場合の$tomのこと)はインスタンスに属する。
同じクラス内でも、それぞれのインスタンスで独自の値を保持する。
対してstaticはクラスそのものに属するので、インスタンスのメンバとは直接の関係がない。
インスタンスを生成せずにメソッドが使える(インスタンスを生成しないので()内は空白になる)

・抽象クラスと実装の違い

意味合いの違い

抽象クラス→複数のクラスの共通部分を抽出後に1つのクラスとして扱う。処理の中身は違うが必要なメソッドを抽象クラスとして定義し、
各クラスはこの抽象クラスを継承(引き継ぎ)して独自の処理をする。

実装→インターフェイスで定義されているメソッドの存在を保証し、実装するクラスの扱い方を筋道立てる。

・外部ファイルの読み込み
require→fatal_error(致命的なエラー)を表示後に処理を終了する。
include→warning(警告)を表示するが処理は継続する。
→onceをつけると読み込む回数を1回にする。

名前空間
class,関数,インターフェイスなどの名前を被らないようにする。
必ずファイルの先頭に指定する<html>よりも前に。
namespace 名前で定義→階層的に管理も可能 名前の後ろに\(バックスラッシュ)フォルダ名など

別名を付ける
 use 名前\フォルダ名asフォルダ名;

・例外処理
まず関数を定義

その後にtryで例外を定義する。

try{
if(){
処理内容;
throw new Exeption 処理内容}catch Exption {

try→例外処理の定義
thrownew→新しい例外をなげる
catch→例外が投げられた時の処理内容


・アンケートフォームなどからデータを受け取り処理する
<?php
$userName="";
if($_SERVER['REQUEST_METHOD'] === 'POST'){ →サーバー側にアクセスして何らかの投稿を受け取っているとき
 $userName = $_POST['$userName']; →$POSTから$userNameを受け取って、$userNameへ代入
$err = falese;
if(strlen($userName > 8){ →受け取ったusernameが8より大きい場合に
 $err = true;
}
}
?>

これをまず<!DCTYPE ~>の上に定義
その後HTML本文中の<formタグの中に
<?php if($err){echo 'Too long!'; ?> →$errの内容がtrueの場合、Too long!を表示する
を入れる。
一緒にvalue = "<?php echo htmlspecialchars($userName,ENT_QUOTES,'UTF-8'; ?>というエスケープ関数も入れておく

cookie
アクセスしてきたブラウザ側にデータをセットする
複数のページのデータ保持に使う。
第3変数で有効期限を決められる
set cookie(〇〇,〇〇, Time() +60*60)→1時間後にリセット
未設定の場合はページを閉じるまで
削除はset cookie(〇〇,〇〇, Time() +60*60)をset cookie(〇〇,〇〇, Time() -60*60)にする。
有効期限を過去のものにする。

・session
サーバ側にデータをセットする

session_start();
$_SESSION[ ]→セッションの内容
echo '$_SESSION[ ]' → 出力

終了
unset