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

More Related Content

What's hot

とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。Kouhei Maeda
 
ダイナミックDNSとは
ダイナミックDNSとはダイナミックDNSとは
ダイナミックDNSとはTakeshi Kabu
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability modeYuichiro Naito
 
Lesson01
Lesson01Lesson01
Lesson01MRI
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'Yamamura Takashi
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説知教 本間
 
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会naka hide
 
リーダブルコード
リーダブルコードリーダブルコード
リーダブルコードKeita Otsuka
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析morphine57
 
Learn Http Requests & Responses for Test Engineer
Learn Http Requests & Responses for Test EngineerLearn Http Requests & Responses for Test Engineer
Learn Http Requests & Responses for Test EngineerTakashi Moriyama
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
20120729 ODbL勉強会
20120729 ODbL勉強会20120729 ODbL勉強会
20120729 ODbL勉強会Shu Higashi
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Muneaki Nishimura
 

What's hot (20)

とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
 
ダイナミックDNSとは
ダイナミックDNSとはダイナミックDNSとは
ダイナミックDNSとは
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
Lesson01
Lesson01Lesson01
Lesson01
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
Frequency with nltk
Frequency with nltkFrequency with nltk
Frequency with nltk
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
 
COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会COBOL技術者のためのJava勉強会
COBOL技術者のためのJava勉強会
 
リーダブルコード
リーダブルコードリーダブルコード
リーダブルコード
 
3-1
3-13-1
3-1
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析
 
[BurpSuiteJapan]HTTP基礎入門
[BurpSuiteJapan]HTTP基礎入門[BurpSuiteJapan]HTTP基礎入門
[BurpSuiteJapan]HTTP基礎入門
 
cache.iijgio.com の中
cache.iijgio.com の中cache.iijgio.com の中
cache.iijgio.com の中
 
Learn Http Requests & Responses for Test Engineer
Learn Http Requests & Responses for Test EngineerLearn Http Requests & Responses for Test Engineer
Learn Http Requests & Responses for Test Engineer
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
DBpedia Japanese
DBpedia JapaneseDBpedia Japanese
DBpedia Japanese
 
20120729 ODbL勉強会
20120729 ODbL勉強会20120729 ODbL勉強会
20120729 ODbL勉強会
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門
 

Similar to PHP+DB

PDOでデータベース接続と SQLインジェクション対策
PDOでデータベース接続と SQLインジェクション対策PDOでデータベース接続と SQLインジェクション対策
PDOでデータベース接続と SQLインジェクション対策iPride Co., Ltd.
 
Open for data_summer_for_slideshare
Open for data_summer_for_slideshareOpen for data_summer_for_slideshare
Open for data_summer_for_slidesharejapan_db2
 
Openfordatasummerforslideshare 160816054829
Openfordatasummerforslideshare 160816054829Openfordatasummerforslideshare 160816054829
Openfordatasummerforslideshare 160816054829mtanaka0111
 
Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4Microsoft
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会Yuji Otani
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築Hideharu MATSUFUJI
 
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』Insight Technology, Inc.
 
20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果Kunihiro Imura
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介bigt23
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3infinite_loop
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginIkuko Kanada
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-pluginFumito Mizuno
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...NTT DATA Technology & Innovation
 
WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」Atsuhiro Takiguchi
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナーKazuko Itoda
 

Similar to PHP+DB (20)

PDOでデータベース接続と SQLインジェクション対策
PDOでデータベース接続と SQLインジェクション対策PDOでデータベース接続と SQLインジェクション対策
PDOでデータベース接続と SQLインジェクション対策
 
Open for data_summer_for_slideshare
Open for data_summer_for_slideshareOpen for data_summer_for_slideshare
Open for data_summer_for_slideshare
 
Openfordatasummerforslideshare 160816054829
Openfordatasummerforslideshare 160816054829Openfordatasummerforslideshare 160816054829
Openfordatasummerforslideshare 160816054829
 
Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4Microsoft Build 2021 前夜祭 LT#4
Microsoft Build 2021 前夜祭 LT#4
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
[db tech showcase Tokyo 2018] #dbts2018 #D1L 『"何が必要?どう実現?"~異種DB間データリアルタイム連携』
 
Dexiejs
DexiejsDexiejs
Dexiejs
 
20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果
 
ZendStudioのご紹介
ZendStudioのご紹介ZendStudioのご紹介
ZendStudioのご紹介
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Hadoopの紹介
Hadoopの紹介Hadoopの紹介
Hadoopの紹介
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
 
WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」WordCampOsaka2012 開発ツール談義「NetBeans」
WordCampOsaka2012 開発ツール談義「NetBeans」
 
20130203 oss-db-lpi
20130203 oss-db-lpi20130203 oss-db-lpi
20130203 oss-db-lpi
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
 

More from Sawada Makoto

ABC 第2回スライド
ABC 第2回スライドABC 第2回スライド
ABC 第2回スライドSawada Makoto
 
AlphabetBootCamp 第1回勉強スライド
AlphabetBootCamp 第1回勉強スライドAlphabetBootCamp 第1回勉強スライド
AlphabetBootCamp 第1回勉強スライドSawada Makoto
 
システム開発について
システム開発についてシステム開発について
システム開発についてSawada Makoto
 
QAサイトをつくってみよう
QAサイトをつくってみようQAサイトをつくってみよう
QAサイトをつくってみようSawada Makoto
 
QAサイトをつくってみよう
QAサイトをつくってみようQAサイトをつくってみよう
QAサイトをつくってみようSawada Makoto
 
第4回 データベース
第4回 データベース第4回 データベース
第4回 データベースSawada Makoto
 
第4回 PHPのおさらい
第4回 PHPのおさらい第4回 PHPのおさらい
第4回 PHPのおさらいSawada Makoto
 

More from Sawada Makoto (7)

ABC 第2回スライド
ABC 第2回スライドABC 第2回スライド
ABC 第2回スライド
 
AlphabetBootCamp 第1回勉強スライド
AlphabetBootCamp 第1回勉強スライドAlphabetBootCamp 第1回勉強スライド
AlphabetBootCamp 第1回勉強スライド
 
システム開発について
システム開発についてシステム開発について
システム開発について
 
QAサイトをつくってみよう
QAサイトをつくってみようQAサイトをつくってみよう
QAサイトをつくってみよう
 
QAサイトをつくってみよう
QAサイトをつくってみようQAサイトをつくってみよう
QAサイトをつくってみよう
 
第4回 データベース
第4回 データベース第4回 データベース
第4回 データベース
 
第4回 PHPのおさらい
第4回 PHPのおさらい第4回 PHPのおさらい
第4回 PHPのおさらい
 

PHP+DB