先月はエンジンかかるのが中盤からになってしまったので、ドットインストールのPHP基礎編が終わりませんでした。反省してコンスタントに!
- 3月の目標
- PHP基礎文法編 #26~#34
- MySQL入門 基礎編 #1~
- 3/8…「#01 MySQLを使ってみよう」
- 3/9…「#03 データベース用語を確認しよう」
- 3/10…「#04 テーブルを作ってみよう」
- 3/10…「#05 レコードを挿入しよう」
- 3/13…「#06 エラーメッセージを読み解こう」
- 3/13…「#07 データ型を見ていこう」
- 3/14…「#09 ENUM型を扱ってみよう」
- 3/16…「#10 SET型を扱ってみよう」
- 3/17…「#11 真偽値、日時を扱ってみよう」
- 3/18…「#12 NULLの扱いを見ていこう」
- 3/19…「#13 値に制限をつけてみよう」
- 3/21…「#14 主キーを設定してみよう」
- 3/21…「#15 SELECTでデータを抽出しよう」
- 3/23…「#16 条件を組み合わせてみよう」
- 3/25…「#17 LIKEと%で文字列を抽出しよう」
- 3/27…「#18 LIKEと_で文字列を抽出しよう」
- 次回…「#19 NULLのレコードを抽出しよう」
3月の目標
今月はまずPHP基礎編を完了させてから、MySQL基礎編(全27回)の完了を目指します👍
PHP基礎文法編 #26~#34
3/1…「#26 条件演算子を使ってみよう」
「return $total < 0 ? 0 : $total;」と書くと変数totalの値が0より小さい時は0を、そうでない時は変数の値を返す、という意味になる。正直覚えづらい(笑)
「if($total<0){return 0;} else {return $total;}」とif~else文で書いたほうがわかりやすくていいと思った。
3/2…「 #27 引数の型を指定しよう 」
関数を設定する時、入れる引数それぞれが文字列なのか整数なのかといった「型」を指定することができる。
function 関数名(string $変数A , int $変数B){処理内容}
であれば、変数Aには整数、変数Bには整数が入るよ、という指定になる。
PHPではデフォルトとして「弱い型付け」状態となっているので、intを指定した変数に誤って文字列扱いの ‘4’ などを入れてもintとして捉えてくれる。
これを防ぐ「強い型付け」にしたい場合は、関数設定の前に「declare(strict_types=1);」と書いておく。
また、処理内容が「return」など返り値がある場合はその型の指定もできる。変数をいれる()の後ろに「:指定したい型」と書いておく。返り値がない場合は「: void」と書く。
3/3…「#28 nullも渡せるようにしよう」
引数や返り値の型を指定した際、そこにnullが入るとエラーになってしまう。これを防ぐには型の前に「?」を付けて「nullかその型」という意味にする。
現在のPHPでは「文字列か整数か」という指定はできない。
3/4…「#29 配列を使ってみよう」
同じ意味合いの複数のデータを扱いたい時は「配列」を使う。
$scores = [90,40,100];
echo $scores[1];
とすると、得点となる3つのデータを呼び出したり変えたりできる。ここではインデックス(添字とも言う)を1として呼び出している。インデックスはデータの左から0番目として数えるので40が表示される。
3/5…「#30 配列のキーを指定しよう」
配列の内容を詳しく見たい時は「var_dump()」か「print_r()」を使う。
また配列の値それぞれにアクセスするために割り振られている0~の数字は好きな文字列や数値に変えられる。最初に配列を組む時に「’first’ => 」などと設定してあげればOK。
3/6…「#31 foreachで配列を操作しよう」
配列のすべての要素に処理を実行したい時は「foreach」を使う。
foreach($scores as $score){echo $score .PHP_EOL;}
$scoresの各要素を1個ずつ$scoreに入れた後にそれらを表示する。
キーも表示したい時は()内を「$scores as $key => $score」にすればよい。
3/7…「#32 配列の要素を展開しよう」
配列の中に、別の変数で扱っている配列の要素を入れたい時は「…$別の変数名」とすればOK。また、配列の要素として直接文字列や新たな配列を入れることも可能。配列の中の配列を呼び出したい時は「echo $scores[5][2].PHP.EOL;」などと書けばよい。
3/7…「#33 可変長引数を表現しよう」
その名の通り、引数がいくつ入ってきてもOKな状態。
まず「(…$numbers)」と仮引数を設定する。合計の値を入れる$totalを0にしておく。次に「foreach($numberes as $number)」で$numbersに入ってる配列の要素を一つずつ$numberに入れてあげ、「$total += $number;」として$totalに足していく。最後に$totalをreturnすればOK。
3/7…「#34 複数の返り値を受け取ってみよう」
配列を使うと複数の返り値を受け取れる。「return[$total , $total/count($numbers)];」で合計値と平均値を受け取れる。
これらをそのまま変数にいれることもできる。
[$sum,$average] = getStats(1,3,5);
MySQL入門 基礎編 #1~
3/8…「#01 MySQLを使ってみよう」
MySQLはデータ管理のシステム。ユーザーデータを集計したり分析したりできる。派生した「MriaDB」というシステムを使って勉強していく。
#2はドットインストールでの操作説明なので視聴のみ。
3/9…「#03 データベース用語を確認しよう」
MySQLは表で管理していく。表をテーブル、横の「行」をrecord、縦の「列」をcolumnと呼ぶ。表、行や列に名前を付け、データを入れていく。MySQLで予め用意されている命令などは大文字で、自分で付けていく表の名前などは小文字で書く。
CREATE TABLE テーブル名(列見出し名① , 列見出し名②);
INSERT INTO
テーブル名(列見出し名① , 列見出し名②)
VALUES
(‘hello!’,22);
3/10…「#04 テーブルを作ってみよう」
「CREATE TABLE テーブル名(カラム名①,カラム名②)でテーブルを作り、「DESC テーブル名」で表の内容確認、「SHOW TABLES」で表を表示。
お手本通りに書いてもエラーになる。QA見ると同様の質問が出ており回答は「次のレッスンで解説してますので見てください」。なんじゃそりゃ(笑)
3/10…「#05 レコードを挿入しよう」
エラーを回避するには最初に「DROP TABLE IF EXISTS テーブル名」と書いておく。
表にレコードを入れるのは「INSERT INTO テーブル名(カラム名①,カラム名②) VALUES(データ①,データ②),(データ③,データ④)…」
入れたレコードを確認するには「SELECT * FROM テーブル名;」
3/13…「#06 エラーメッセージを読み解こう」
間違えて実行すると英語がワシャっと出てくるが、焦らず読むと「line○のYouのsyntax、errorあるよ!」と教えてくれている。○行目の構文の中に間違ってるところがあるよということ。
さらに「’~~~~’の近くで正しい構文を使うためにマニュアルをチェックしてみ」と教えてくれてるので、’~~~~’の前後の入力を確認する。
3/13…「#07 データ型を見ていこう」
整数のデータ型はTINYINT,INT,BIGINT。扱える整数の幅に違いがあるが大抵はINT(-21億~+21億)で済む。またマイナス値を扱う必要がない時はINTのデータ型の後ろに「UNSIGNED」を付けると範囲をプラス域に全振りできる(INTなら0~42億)ので覚えておく。
実数のデータ型は固定小数点のDECIMALを使うことが多い。(浮動小数点はFLOAT、DOUBLE(高精度))
文字列のデータ型は~255文字ならCHAR、~65535文字ならVARCHAR、それ以上ならTEXT。
真偽値のデータ型はBOOL。PHPの仕様上、TRUEを1、FALSEを0としているので実質はTINYINT(1)と同義だったりする。
日時のデータ型は、日付ならDATE、時間ならTIME、日時ならDATETIMEでOK。
「#08 数値、文字列を扱ってみよう」は以上の入力編なので省略。
3/14…「#09 ENUM型を扱ってみよう」
ENUM型(読み:えなむがた)は特定の文字列の中から1つだけ格納できる型。
category ENUM(‘Gadget’, ‘Game’, ‘Business’)
としておく場合、表にデータをINSERTする時に、3つのどれかを指定でき、それ以外だとエラーになる。インデックス番号でも指定できるが0でなく1から始まるので注意。
3/16…「#10 SET型を扱ってみよう」
ENUM型は1つしか選べなかったがSET型にすると複数選べる。(この際、カラム名も複数形にする、カンマで区切る、空白は入れない)
こちらも数値で表現できる。左から2のべき乗が当て込まれているので1,2,4…となる。これらを足した数値を入れる。
3/17…「#11 真偽値、日時を扱ってみよう」
真偽値BOOLは、例えば下書きかどうかを示す項目として「is_draft」という名前にしてtrueかfalse(もしくは1か0)を入れる。
日時DATETIMEは例えば「created」という項目名にして「2021-03-17 10:05:00」などと入れる。時刻を入れないと「00:00:00」になり、今現在の日時を入れたい時は「NOW()」とする。
3/18…「#12 NULLの扱いを見ていこう」
2つあるカラムのうち、1つにだけレコードを入れた時、もう1つには何もないという意味の「NULL」が自動で入る。
これをNULLではなくerrorにしたいという時はそのカラムのデータ型の後ろに「NOT NULL」を付けておく。もしくは自動で「0」としたい時は「DEFAULT 0」を付けておけばOK。
3/19…「#13 値に制限をつけてみよう」
CHECKで値の範囲を設定し、あてはまらない場合エラーにできる。例えば「CHECK( likes >=0 AND likes<=100)」でいいねを0~100に指定できる。
またUNIQUEを付けておくと重複してる場合エラーにできる。
3/21…「#14 主キーを設定してみよう」
主キーとは重複なく識別できるようにするためんい付与しておくもの。社員番号や商品番号のようなもの。
id INT NUT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
これで、idにNULLでない整数という型を設定し、更に「AUTO_INCREMET」で自動で連番を振れるようにできる。
3/21…「#15 SELECTでデータを抽出しよう」
SELECT * FROM posts;
「*」は全てのカラムという意味。ここは特定のカラム名だけにしてもよい。また抽出条件を付けたい時は後ろに「WHERE likes >=10」や「WHERE message = ‘~~~’」を付ける。
「!=」「<>」はどちらも「等しくない」の意味。馴染みないので覚えておこう。
3/23…「#16 条件を組み合わせてみよう」
複数の条件を組み合わせて抽出できる。「◎以上◎以下」ならばANDで条件を繋げてもいいが「BETWEEN 10 AND 20」と書いてもいい。BETWEENの前にNOTを入れて条件をひっくり返ることもできる。
ORで繋げた条件は「IN(◎,◎)」と書くこともでき、これもNOTでひっくり返せる。
3/25…「#17 LIKEと%で文字列を抽出しよう」
SELECT * FROM posts WHERE message LIKE ‘t%’
で「t」から始まるメッセージを持つレコードを抽出できる。大文字か小文字か選別したい時はLIKEの後ろに「BINARY」を付ける。「%su」で「suで終わる」、「%i%」で「iを含む」とできる。
3/27…「#18 LIKEと_で文字列を抽出しよう」
「_」は任意の1文字を、「%」は0文字以上の任意の文字を指す。「’__a%’」とすると「3文字目がaになっているレコード」を指せる。また「_」や「%」を文字として含むレコードを抽出したい場合は、「\_」「\%」というふうにバックスラッシュを使う。