自己紹介
はじめまして、株式会社シーエー・アドバンス技術統括本部の@ihahajimeと申します。
開発知識を身に付けよう!という研修の一環で、PHPを勉強してます。
開発言語は学生時代にJavaを講義で勉強した程度で、
卒業してからはほぼ触ることすらなかったくらいの初心者です。
こういう記事を書くのも初めてですが、どうぞ宜しくお願い致します。
はじめに
今回は研修で勉強しているPHP7で個人的につまづいたところを、書いていきたいと思います。
PHP7を動かす準備はMAMP、Githubを使い更新箇所などの管理を行い勉強していってます。
下記の書籍を参考にしています。
つまづいたところ
自分が勉強してつまづいた箇所、理解するのに特に大変だった箇所です。
- 連想配列
- プリペアドステートメントとプレースホルダ
連想配列
Javaを習っていた頃から配列が苦手だったのでイメージするのに苦労しました・・・。
$Array = [
"id" => 000,
"name" => "あああ",
"age" => 27,
...
]
上記Array配列は、以下の内容となります。
- Array[id]に000を格納("id"キーの値は”000")
- Array[name]に"あああ"を格納("name"キーの値は”あああ”)
- Array[age]に27を格納("age"キーの値は”27”)
→"名前の付けれる容器”に”値”を格納できる配列
プリペアドステートメントとプレースホルダ
こちらもイメージするのに苦労しました・・・。
// SQL文を作る
$sql = "SELECT * FROM users WHERE id = :id";
// プリペアドステートメントを作る
$stm = $pdo->prepare($sql);
// プレースホルダに値を格納する
$stm->bindValue(':id', $s_id, PDO::PARAM_INT);
// SQL文を実行する
$stm->execute();
2行目と4行目で、"SELECT * FROM users WHERE id = :id";というSQL文を用意しておき、
6行目では、先ほど用意したSQL文内の:idに変数$s_idの値が適宜代入されていく。
SQLを使用しデータを取得するとき、同じSQLを何度も行うことがあります。
先に変数として当てはめたSQL文を用意しておき、
そのあとに、変数に当てはめる値だけを送り、SQLを実行する。
そうすることで、SQL文を繰り返し使うことができ、処理が効率的になる。
→このような仕組みがプリペアドステートメント
SQLインジェクション対策として、SQL文のシングルクォートのような特別な意味をもつ記号文字を取り除く「エスケープ処理」を行う必要があり、プレースホルダにいったん値を格納することにより、エスケープ処理を自動で行ってくれるもの。
→このような仕組みがプレースホルダ
まとめ
とにかくはっきりとイメージして、流れを理解することが大切ということでした。
頭の中で考えるだけでなく、実際に紙にフロー図を描くなどしてみると、
コードの流れもすぐイメージできるようになりました。
おわりに
他にも悩んだものやつまづいたものありましたが、あげだすとキリがないので、
今回は特に気になっていた箇所について、備忘録として書かせていただきました。
これからまた時間があれば、書いていきたいと思います。
知識不足なところが多いと思いますので、ご指摘やこう考えればもっと分かりやすいよ!等ありましたらお願いします。