php+db
TRANSCRIPT
![Page 1: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/1.jpg)
第 4 回 PHP+DBAlphabetBootCamp
![Page 2: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/2.jpg)
アジェンダ
環境
今回の範囲
PDO とは
PDO の使い方
セキュリティ
実際に試してみよう
![Page 3: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/3.jpg)
今回の範囲
PHP で DB(MySQL) につなぐ方法を学び、
実際に DB に対してデータの追加・取得を行うところまで
![Page 4: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/4.jpg)
環境 (Environment)
実行環境
OS: Windows10 PHP: PHP7.0.13※ 他の OS, バージョンでも問題ないです
![Page 5: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/5.jpg)
PDO(PHP Data Objects) とは
標準で用意されている DB に接続するための仕組み
特徴 PHP における DB にアクセスする方法の主流
どの DB 製品を使っても同じ使い方が可能
⇒ とりあえず PDO を使う!
![Page 6: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/6.jpg)
PDO の使い方
PDO 使うために必要なパラメータは3つ
1. DSN :データベースに接続するための接続情報2. DB のユーザ名:デフォルトは root3. DB のパスワード:デフォルトは未設定
⇒ おまじない的に設定で OK !
※ 他にもオプションを渡せますが、割愛…
![Page 7: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/7.jpg)
DSN の設定
MySQL の DNS
書式
mysql:dbname= データベース名 ;host= ホスト ;port= ポート
データベース名 : 作成したデータベース名
ホスト : ローカルの場合は、 localhost( もしくは 127.0.0.1)ポート : 初期値は「 3306 」(ただし、省略可能)
example.mysql:dbname=abc;host=localhost;port=3306
![Page 8: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/8.jpg)
PDO オブジェクトの生成
<?php// DNS$dns = 'mysql:dbname=abc;host=localhost;port=3306;charset=utf8’;// DB のユーザ名
$dbUser = 'root’;// DB のパスワード
$dbPassword = '’;// PDO オブジェクトの生成$pdo = new PDO($dns, $dbUser, $dbPassword);
![Page 9: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/9.jpg)
SQL を発行してみよう
これで DB との接続は OK !
あとは SQL を発行して、データの追加や取得を行う
![Page 10: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/10.jpg)
SQL を発行してみよう - SELECT
<?php// ユーザ情報を全て取得する SQL$sql = 'SELECT * FROM users’;$stmt = $pdo->query($sql);foreach ($stmt as $row) { echo $row['name’] . '<br>’;}
データの取得は query メソッド
![Page 11: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/11.jpg)
SQL を発行してみよう – INSERT/UPDATE/DELETE
<?php// ユーザーを追加
$sql = “INSERT INTO users (name) VALUES(' 澤田 諒 ')";$stmt = $pdo->prepare($sql);$stmt->execute();
データの追加・更新・削除は execute メソッド
![Page 12: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/12.jpg)
セキュリティ
忘れてはいけないのがセキュリティ
Web は全世界に対して公開される!
セキュリティが甘いと、個人情報が漏れたり…
ユーザにとっても、販売会社にとっても、開発会社にとっても大変なことに!!!
![Page 13: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/13.jpg)
セキュリティを怠るとどうなるか。
あるインテリアショップの事例で、SQL インジェクション対策が十分でないという理由から開発会社が提訴された。
⇒ 開発会社が約 3,232 万円を支払うという判決
必ず、 SQL インジェクション対策をしよう!
SQL インジェクション対策もれの責任を開発会社に問う判決 - 徳丸浩の日記http://blog.tokumaru.org/2015/01/sql.html
![Page 14: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/14.jpg)
SQL インジェクションとは?
SQL インジェクション(英 : SQL Injection )とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しない SQL 文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。また、その攻撃を可能とする脆弱性のことである。 [1]
SQL インジェクション – Wikipediahttps://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
![Page 15: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/15.jpg)
SQL インジェクションの例
SQL にユーザからの入力を直接 SQL に埋め込むと、意図しない SQL が実行される可能性がある
たとえば
SELECT * FROM users WHERE name = ‘( 入力値 )’ という SQL だと、入力値に’ t’ or ‘t’ = ‘t’ を入力されると
SELECT * FROM users WHERE name = ‘t’ OR ‘t’ = ‘t’;という SQL が発行され、他のユーザ情報が表示されてしまうことになる
![Page 16: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/16.jpg)
SQL インジェクション対策
バインド機構を利用して、ユーザの入力値を埋め込む
Example$sql = ‘SELECT * FROM users WHERE name = :name’;$stmt = $pdo->prepare($sql);// 値の設定
$stmt->bindValue(‘:name’, $name, PDO::PARAM_STR);$stmt->execute();
:nameに$nameを埋め込む
![Page 17: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/17.jpg)
実際に PHP から DB に繋いでみよう!
第3回勉強会では CSV に内容を保存する掲示板を作りました
今回は、 CSV から DB に置き換えてみましょう!
![Page 18: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/18.jpg)
おすすめ本 (?)
「詳細 ! PHP7 + MySQL 」
価格 : 3,218 円 (Kindle 版 : 966 円 )※ Amazon の販売価格
おすすめポイント
PHP7 対応!
![Page 19: PHP+DB](https://reader035.vdocuments.mx/reader035/viewer/2022062523/58f1c8831a28ab6b698b45d1/html5/thumbnails/19.jpg)
おすすめ本
「体系的に学ぶ 安全な Web アプリケーションの作り方 脆弱性が生まれる原理と対策の実践」
価格 : 3,456 円 (Kindle 版 : 3024 円 )※ Amazon の販売価格
おすすめポイント
脆弱性を実際のコードで試しながら、攻撃の仕方・対策が学べる!