phpデータベース基本 · ビルトイン関数 処理速度が速い...
TRANSCRIPT
![Page 1: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/1.jpg)
PHPデータベース基本
基本的な概念とサンプルコード
Copyright 2015 konekto, Inc
![Page 2: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/2.jpg)
データベース基本
データベース処理の基本知識を解説します。
# 2Copyright 2015 konekto, Inc
![Page 3: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/3.jpg)
# 3
データベース基礎知識
�データベースとは…
�特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの
�データベースの管理はDBMS(データベース管理システム)が行う
Copyright 2015 konekto, Inc
![Page 4: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/4.jpg)
# 4
データベース基礎知識
�RDBMSとは…
�リレーショナルデータベース管理システム
�現在最も多く利用されている
� 1件のデータを複数の項目(カラム/フィールド)の集合と
して表現
�レコードの集合をテーブルとして保持
カラム
レコード
テーブル
Copyright 2015 konekto, Inc
![Page 5: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/5.jpg)
# 5
データベースリレーション
�リレーションとは…
�関連する値を通じて結合して表を作成(重複)
カラム
テーブル
Copyright 2015 konekto, Inc
ID 部署No 名前 内線番号
1 11 佐藤 1111
2 22 田中 1112
3 33 山田 1113
部署No 部門名 ロケーション
11 システム部 研究所
22 営業部 営業所
33 総務部 本社
ID 名前 部門名 ロケーション
1 佐藤 システム部 研究所
2 田中 営業部 営業所
3 山田 総務部 本社
![Page 6: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/6.jpg)
# 6
データベース基礎知識
�主なRDBMS
�MySQL
�PostgreSQL
�Oracle
�DB2
�MSSQL
�その他
�Access, Firebird, Cloudscape...
Copyright 2015 konekto, Inc
![Page 7: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/7.jpg)
# 7
データベース基礎知識
�データベースの役割�大量のデータを多数のユーザのもとで一元管理を
行うことが可能
DBサーバWebサーバ
SQL処理
管理者
一般ユーザ
Webアプリ
Copyright 2015 konekto, Inc
![Page 8: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/8.jpg)
# 8
データベースSQL
�SQLとは…
� SQL: Structured Query Language
�世界標準規格のデータベース操作言語
� RDBMSにおいて、データの操作や定義を行うためのデータベース言語(問い合わせ言語)
Copyright 2015 konekto, Inc
![Page 9: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/9.jpg)
# 9
データベースSQL
�SQLの種類
�DDL: Data Definition Language→CREATE,ALTER,DROP,GRANT文
�DML: Data Manipulation Language
→INSERT,DELETE,UPDATE,SELECT文
�DCL: Data Control Language
→COMMIT,ROLLBACK文
Copyright 2015 konekto, Inc
![Page 10: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/10.jpg)
# 10
データベースSQL
�SQLの互換性
�原則的にANSI / JIS に準拠
�最低限の互換性が保証されているが、各RDBMSによって独自拡張機能が数多くあり、その部分の互換性は確保されていない
�上記理由によりマイグレーション作業には注意が必要
Copyright 2015 konekto, Inc
![Page 11: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/11.jpg)
PHPのデータベース環境
ベンダー固有モジュールからPDOまで
# 11Copyright 2015 konekto, Inc
![Page 12: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/12.jpg)
# 12
PHPデータベース機能
� PHPからデータベースを利用する�データベースサーバに接続するには以下の3つの方法
があります� ビルトイン関数
�処理速度が速い
�データベースごとに異なったコーディングが必要
� PEAR DB
� PHPに標準バンドルされているライブラリ
�データベースの種類に依存しない設計
�ビルトイン関数をPHPによってラッピングしているので処理速度の問題がある
� PDO (PHP Data Objects )
� PHP5.1以降から標準バンドル
�ライトウェイトでデータベースの種類に依存しない設計
� Zend Framework にて使用
Copyright 2015 konekto, Inc
ベンダー固有
モジュール
![Page 13: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/13.jpg)
ベンダー固有モジュールによる
データベース処理
SQLITE3を使用して手軽にデータベース処理を体感
# 13Copyright 2015 konekto, Inc
![Page 14: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/14.jpg)
ベンダー固有モジュール
�対象となるデータベース毎に用意された関数
�データベース固有の機能が利用可能
�対象データベースに特化した処理が可能
# 14Copyright 2015 konekto, Inc
![Page 15: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/15.jpg)
ベンダー固有のモジュール
� CUBRID
� DB++
� dBase
� filePro
� Firebird/InterBase
� FrontBase
� IBM DB2 — IBM DB2、Cloudscape および Apache Derby
� Informix
� Ingres — Ingres DBMS, EDBC および Enterprise Access Gateways
� MaxDB
� Mongo — MongoDB
� mSQL
� Mssql — Microsoft SQL Server
� MySQL — MySQL ドライバおよびプラグイン
� OCI8 — Oracle OCI8
� Paradox — Paradox ファイルアクセス
� PostgreSQL
� SQLite
� SQLite3
� SQLSRV — PHP 用 Microsoft SQL Server ドライバ
� Sybase
� tokyo_tyrant
# 15Copyright 2015 konekto, Inc
![Page 16: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/16.jpg)
MySQLで検証
� Mysql — 最初の MySQL API
� Mysqli — MySQL 改良版拡張モジュール
� Mysqlnd — MySQL Native Driver
� mysqlnd_ms — Mysqlnd レプリケーションおよびロードバランシング用プラグイン
� mysqlnd_qc — Mysqlnd クエリ結果キャッシュプラグイン
� mysqlnd_uh — Mysqlnd user handler plugin
� mysqlnd_mux — Mysqlnd connection multiplexing plugin
� mysqlnd_memcache — Mysqlnd Memcache プラグイン
# 16Copyright 2015 konekto, Inc
![Page 17: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/17.jpg)
PHP環境の確認
phpinfo関数によるデータベースドライバの確認
Copyright 2015 konekto, Inc # 17
![Page 18: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/18.jpg)
PHP環境の確認①
Copyright 2015 konekto, Inc # 18
![Page 19: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/19.jpg)
PHP環境の確認②
Copyright 2015 konekto, Inc # 19
![Page 20: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/20.jpg)
SQLITE3のインストール
シンプルで軽量なデータベース環境を用意します。
Copyright 2015 konekto, Inc # 20
![Page 21: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/21.jpg)
インストール手順①
�SQLITE3を入手
�http://www.sqlite.org/
�Precompiled Binaries for Windowssqlite-shell-win32-x86-3080802.zip(306.08 KiB) *2/15現在
�適当に展開(別途説明)
Copyright 2015 konekto, Inc # 21
![Page 22: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/22.jpg)
インストール手順②
�SQLITE3を実行&データベースファイルの作成
C:¥SQLITE>sqlite3 test
SQLite version 3.8.8.2 2015-01-30 14:30:45
Enter ".help" for usage hints.
�起動時にデータベースファイルを指定します。存在しない場合には、自動的に作成します。
Copyright 2015 konekto, Inc # 22
![Page 23: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/23.jpg)
インストール手順③
C:¥SQLITE>sqlite3 test
SQLite version 3.8.8.2 2015-01-30 14:30:45
Enter ".help" for usage hints.
sqlite> create table meibo (
...> sno INTEGER,
...> name text,
...> memo text,
...> dflag INTEGER,
...> bdate text,
...> idate text,
...> udate text);
�例題で使用するテーブル ‘meibo’を作成します。Copyright 2015 konekto, Inc # 23
![Page 24: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/24.jpg)
データを挿入入力
sqlite> insert into meibo (sno,name,dflag) values (1,"Satou",0);
sqlite> select * from meibo;
1|Satou||0|||
sqlite> insert into meibo (sno,name,dflag) values (2,"佐藤",0);
sqlite> select * from meibo;
1|Satou||0|||
2|佐藤||0|||
Copyright 2015 konekto, Inc # 24
![Page 25: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/25.jpg)
例題ファイル
処理内容 ファイル名
参照 select.php
挿入 insert.php
更新 update.php
削除 delete.php
# 25Copyright 2015 konekto, Inc
![Page 26: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/26.jpg)
select.php
<?php
try {
$db = new SQLite3('c:¥sqlite¥test');
$results = $db->query('SELECT * FROM meibo');
while ($row = $results->fetchArray()) {
print $row['sno'].' ' ;
print $row['name'].' ' ;
print $row['memo'].' <br>' ;
}
$db->close();
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $e->getTraceAsString();
}
?>
# 26Copyright 2015 konekto, Inc
![Page 27: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/27.jpg)
insert.php
<?php
try {
$db = new SQLite3('c:¥sqlite¥test');
$stmt = $db->prepare('INSERT INTO meibo (sno,name) VALUES (:id,:name)');
$stmt->bindValue(':id', $sno_max+1, SQLITE3_INTEGER);
$stmt->bindValue(':name', '吉田', SQLITE3_TEXT);
$result = $stmt->execute();
$db->close();
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $e->getTraceAsString();
}
?>
# 27Copyright 2015 konekto, Inc
![Page 28: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/28.jpg)
update.php
<?php
try {
$db = new SQLite3('c:¥sqlite¥test');
$stmt = $db->prepare('update meibo set memo = :memo where name like :name');
$stmt->bindValue(':memo', 'メモを更新', SQLITE3_TEXT);
$stmt->bindValue(':name', '吉田', SQLITE3_TEXT);
$result = $stmt->execute();
$db->close();
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $e->getTraceAsString();
}
?>
# 28Copyright 2015 konekto, Inc
![Page 29: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/29.jpg)
delete.php
<?php
try {
$db = new SQLite3('c:¥sqlite¥test');
$stmt = $db->prepare('DELETE from meibo where name like :name');
$stmt->bindValue(':name', '吉田', SQLITE3_TEXT);
$result = $stmt->execute();
$db->close();
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $e->getTraceAsString();
}
?>
# 29Copyright 2015 konekto, Inc
![Page 30: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/30.jpg)
PDOによるデータベース処理
SQLITE3を使用してベンダー固有モジュールとの比較
# 30Copyright 2015 konekto, Inc
![Page 31: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/31.jpg)
抽象化レイヤー
�DBA — データベース (dbm 形式) 抽象化レイヤ
�dbx
�ODBC — ODBC (Unified)
�PDO — PHP Data Objects
# 31Copyright 2015 konekto, Inc
![Page 32: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/32.jpg)
# 32
PDOの目的
�PDO (PHP Data Objects )
�PDOは様々なRDBMSを統一的に扱うことが可能です (隠蔽化:カプセル化)
�言い換えると一度PDOの使い方を覚えてしまえば、対応しているRDBMSであれば全て同じコーディングで済みます
�オブジェクト指向と例外処理に対応しています
Copyright 2015 konekto, Inc
![Page 33: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/33.jpg)
PDOドライバ
� CUBRID 関数(PDO_CUBRID)
� Microsoft SQL Server および Sybase 関数(PDO_DBLIB)
� Firebird 関数(PDO_FIREBIRD)
� IBM 関数 (PDO_IBM)
� Informix 関数(PDO_INFORMIX)
� MySQL 関数(PDO_MYSQL)
� Microsoft SQL Server 関数 (PDO_SQLSRV)
� Oracle 関数 (PDO_OCI)
� ODBC および DB2 関数(PDO_ODBC)
� PostgreSQL 関数(PDO_PGSQL)
� SQLite 関数(PDO_SQLITE)
� 4D 関数 (PDO_4D)
# 33Copyright 2015 konekto, Inc
![Page 34: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/34.jpg)
# 34
データベースPDO
�PDOのクラス
�PDO
�RDBMSへの接続を保持するクラス
�PDOStatement
�SQLの実行、結果セットとして返される
�PDOException
�PDOStatementが投げる例外のクラス
Copyright 2015 konekto, Inc
![Page 35: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/35.jpg)
# 35
データベースPDO
�PDOの使い方�PHPスクリプトでデータベースに接続するには ま
ずデータソース(DSN)を確認する必要があります
�DSN (Database Source Name)
�データベース接続の際に必要なデータを文字列であらわします
'mysql:host=localhost;dbname=test','user','pass'
DBの種類 DBホスト名 使用するDB名
ユーザ名 パスワード
Copyright 2015 konekto, Inc
![Page 36: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/36.jpg)
# 36
データベースPDO
�PDOの使い方�MySQLへの接続
�DSNを引数としてPDOクラスのインスタンスを生成することでMySQLに接続することができます
$dbh = new PDO('mysql:host=localhost;dbname=test','user','pass');
�PDOの切断�スクリプト終了と同時に自動的に切断するが、
明示的に切断したい場合は以下のようにする
$dbh = null;
Copyright 2015 konekto, Inc
![Page 37: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/37.jpg)
# 37
データベースPDO
try {
$dbh = new PDO('mysql:host=localhost;dbname=test','user','pass');
}
$dbh = null;
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
�PDOの使い方�PHPスクリプトで接続する際には例外処理を使用
します
�PDOに接続してみましょう
Copyright 2015 konekto, Inc
![Page 38: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/38.jpg)
# 38
データベースPDO
try {
$dbh = new PDO('mysql:dbname=test;host=localhost', 'user','pass');
//エラー時に例外を投げる設定
$dbh ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'INSERT INTO test VALUES(2, "tanaka")';
$stmt = $dbh->query($sql);
$dbh = null;
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
�PDOの使い方�先程作成したテーブル「test」にデータを挿入す
るスクリプトを作ります
Copyright 2015 konekto, Inc
![Page 39: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/39.jpg)
# 39
データベースPDO
�PDOの使い方�SELECT文を発行して「test」テーブルに登録さ
れている全てのデータを取得します
try {
$dbh = new PDO('mysql:dbname=test;host=localhost', 'user','pass');
$dbh ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// foreach文を使って一行ずつ取得
foreach ($dbh->query('SELECT * from test') as $row) {
var_dump($row);
}
$dbh = null;
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
Copyright 2015 konekto, Inc
![Page 40: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/40.jpg)
例題ファイル
処理内容 ファイル名
参照 select2.php
挿入 insert2.php
更新 update2.php
削除 delete2.php
# 40Copyright 2015 konekto, Inc
![Page 41: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/41.jpg)
select2.php
<?php
try {
$db = new PDO('sqlite:c:¥sqlite¥test');
$sql ='SELECT * FROM meibo';
$results = $db->query($sql);
foreach ($results as $row) {
print $row['sno'].' ' ;
print $row['name'].' ' ;
print $row['memo'].' <br>' ;
}
$db=null;
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $db->errorInfo();
}
?>
# 41Copyright 2015 konekto, Inc
![Page 42: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/42.jpg)
insert2.php
<?php
try {
$db = new PDO('sqlite:c:¥sqlite¥test');
$sql = $db->prepare("insert into meibo (sno,name,memo) values (?,?,?)");
$arg = array($sno_max + 1, "田中","メモ帳");
$sql->execute($arg);
$db=null;
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $db->errorInfo();
}
?>
# 42Copyright 2015 konekto, Inc
![Page 43: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/43.jpg)
update2.php
<?php
try {
$db = new PDO('sqlite:c:¥sqlite¥test');
$sql = $db->prepare("update meibo set memo=? where name like ?");
$arg = array("手の甲にメモ","田中");
$sql->execute($arg);
$db=null;
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $db->errorInfo();
}
?>
# 43Copyright 2015 konekto, Inc
![Page 44: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/44.jpg)
delete2.php
<?php
try {
$db = new PDO('sqlite:c:¥sqlite¥test');
$sql = $db->prepare("delete from meibo where name like ?");
$arg = array("田中");
$sql->execute($arg);
$db=null;
} catch (Exception $e) {
print 'DBへの接続でエラーが発生しました。<br>';
print $db->errorInfo();
}
?>
# 44Copyright 2015 konekto, Inc
![Page 45: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/45.jpg)
IBMiとPHPの連係
Copyright 2015 konekto, Inc
![Page 46: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/46.jpg)
DB2/400への接続:概要
�PHPからDB2/400を操作可能
db2関数
# 46Copyright 2015 konekto, Inc
![Page 47: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/47.jpg)
DB2/400への接続:命令(関数)
�接続と切断�db2_connect
�db2_close
�db2_pconnect
�db2_pclose
� SQL実行�db2_exec
�db2_fetch_array
�db2_fetch_assoc
�db2_fetch_both
�プリペア�db2_prepare
�db2_bind_param
�db2_execute
�トランザクション�db2_commit
�db2_rollback
# 47Copyright 2015 konekto, Inc
![Page 48: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/48.jpg)
DB2/400への接続:コードサンプル
<?php$db_con = db2_connect('', '', '');if(!$db_con){
echo 'DB2に接続できません:', db2_conn_errormsg();exit;
}$query = ' SELECT * FROM ZPHPTEST.ZLOGF ORDER BY CTIME ';$result = db2_exec($db_con, $query);if(!$result){
echo 'SQLが実行できませんでした:', db2_stmt_errormsg();db2_close($db_con);exit;
}echo '<table border=1>',
'<tr><th>CTIME</th></tr>';
while($row = db2_fetch_array($result)) {echo '<tr>',
'<td>', $row[0], '</td>','</tr>';
}echo '</table>';db2_close($db_con);?>
# 48Copyright 2015 konekto, Inc
![Page 49: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/49.jpg)
DB2/400への接続:参考情報
�Konekto技術情報ページ
�http://www.konekto.jp/tech/index.php?Old%2FZend%20Server%2FIBMi%2Fdb2func
�Ustream(PHP勉強会2011年度)
�:TEAM-HALh
# 49Copyright 2015 konekto, Inc
![Page 50: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/50.jpg)
IBM iとの連携:概要
�PHPからIBM i に接続
�プログラムの実行
�システム資源の参照
CL RPG
スプール
ジョブログ
システム値
オブジェクト一覧
db2関数XML Toolkit RPG
# 50Copyright 2015 konekto, Inc
![Page 51: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/51.jpg)
IBM iとの連携:命令(メソッド)
� Toolkitオブジェクト� getInstanceメソッド 接続とオブジェクトの作成
� Disconnectメソッド 切断とオブジェクトの削除
� メソッドの種類� CLCommand メソッド� PGMCall メソッド� パラメーター設定メソッド
� AddParameterChar
� AddParameterPackDec, AddParameterZoned
� AddParameterFloat
� AddParameterReal
� AddParameterBin
� AddParameterInt32, AddParameterUInt32
� AddParameterInt64, AddParameterUint64
� AddDataStruct
� UpdateParameterValue
� iToolkit サービス・クラス� スプール・ファイル
� GetSPLList
� GetSPLF
� ジョブログ� JobList
� createJobListArray
� JobLog
� システム値� SystemValuesList
� GetSystemValue
� オブジェクト一覧� getObjectList
# 51Copyright 2015 konekto, Inc
![Page 52: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ](https://reader035.vdocuments.pub/reader035/viewer/2022071219/60542e2ccaaa3612f80cf457/html5/thumbnails/52.jpg)
IBM iとの連携:コードサンプル
</pre> <?php
include_once 'authorization.php';include_once '../API/ToolkitService.php';
try { $obj = ToolkitService::getInstance($db, $user, $pass);
}catch (Exception $e) {
echo $e->getMessage(), "¥n";exit();
}
$obj->setToolkitServiceParams(array('InternalKey'=>"/tmp/$user", 'debug'=>false, 'plug' => "iPLUG32K"));
$cmd = "addlible ZENDSVR"; $obj->CLCommand($cmd);echo "<pre>"; $Rows = $obj->CLInteractiveCommand("DSPLIBL");
/*$Rows = $obj->CLInteractiveCommand("WRKSYSVAL OUTPUT(*PRINT)");*/
if(!$Rows )echo $obj->getLastError();
else var_dump($Rows);
echo "</pre>";?>
# 52Copyright 2015 konekto, Inc