PHPデータベース基本 · ビルトイン関数 処理速度が速い...

52
PHPデータベース基本 基本的な概念とサンプルコード Copyright 2015 konekto, Inc

Transcript of PHPデータベース基本 · ビルトイン関数 処理速度が速い...

Page 1: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

PHPデータベース基本

基本的な概念とサンプルコード

Copyright 2015 konekto, Inc

Page 2: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

データベース基本

データベース処理の基本知識を解説します。

# 2Copyright 2015 konekto, Inc

Page 3: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 3

データベース基礎知識

�データベースとは…

�特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの

�データベースの管理はDBMS(データベース管理システム)が行う

Copyright 2015 konekto, Inc

Page 4: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 4

データベース基礎知識

�RDBMSとは…

�リレーショナルデータベース管理システム

�現在最も多く利用されている

� 1件のデータを複数の項目(カラム/フィールド)の集合と

して表現

�レコードの集合をテーブルとして保持

カラム

レコード

テーブル

Copyright 2015 konekto, Inc

Page 5: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 6

データベース基礎知識

�主なRDBMS

�MySQL

�PostgreSQL

�Oracle

�DB2

�MSSQL

�その他

�Access, Firebird, Cloudscape...

Copyright 2015 konekto, Inc

Page 7: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 7

データベース基礎知識

�データベースの役割�大量のデータを多数のユーザのもとで一元管理を

行うことが可能

DBサーバWebサーバ

SQL処理

管理者

一般ユーザ

Webアプリ

Copyright 2015 konekto, Inc

Page 8: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 8

データベースSQL

�SQLとは…

� SQL: Structured Query Language

�世界標準規格のデータベース操作言語

� RDBMSにおいて、データの操作や定義を行うためのデータベース言語(問い合わせ言語)

Copyright 2015 konekto, Inc

Page 9: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 10

データベースSQL

�SQLの互換性

�原則的にANSI / JIS に準拠

�最低限の互換性が保証されているが、各RDBMSによって独自拡張機能が数多くあり、その部分の互換性は確保されていない

�上記理由によりマイグレーション作業には注意が必要

Copyright 2015 konekto, Inc

Page 11: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

PHPのデータベース環境

ベンダー固有モジュールからPDOまで

# 11Copyright 2015 konekto, Inc

Page 12: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

ベンダー固有モジュールによる

データベース処理

SQLITE3を使用して手軽にデータベース処理を体感

# 13Copyright 2015 konekto, Inc

Page 14: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

ベンダー固有モジュール

�対象となるデータベース毎に用意された関数

�データベース固有の機能が利用可能

�対象データベースに特化した処理が可能

# 14Copyright 2015 konekto, Inc

Page 15: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

ベンダー固有のモジュール

� 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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

PHP環境の確認

phpinfo関数によるデータベースドライバの確認

Copyright 2015 konekto, Inc # 17

Page 18: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

PHP環境の確認①

Copyright 2015 konekto, Inc # 18

Page 19: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

PHP環境の確認②

Copyright 2015 konekto, Inc # 19

Page 20: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

SQLITE3のインストール

シンプルで軽量なデータベース環境を用意します。

Copyright 2015 konekto, Inc # 20

Page 21: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

インストール手順①

�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に標準バンドルされているライブラリ

インストール手順②

�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に標準バンドルされているライブラリ

インストール手順③

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に標準バンドルされているライブラリ

データを挿入入力

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に標準バンドルされているライブラリ

例題ファイル

処理内容 ファイル名

参照 select.php

挿入 insert.php

更新 update.php

削除 delete.php

# 25Copyright 2015 konekto, Inc

Page 26: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

PDOによるデータベース処理

SQLITE3を使用してベンダー固有モジュールとの比較

# 30Copyright 2015 konekto, Inc

Page 31: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

抽象化レイヤー

�DBA — データベース (dbm 形式) 抽象化レイヤ

�dbx

�ODBC — ODBC (Unified)

�PDO — PHP Data Objects

# 31Copyright 2015 konekto, Inc

Page 32: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 32

PDOの目的

�PDO (PHP Data Objects )

�PDOは様々なRDBMSを統一的に扱うことが可能です (隠蔽化:カプセル化)

�言い換えると一度PDOの使い方を覚えてしまえば、対応しているRDBMSであれば全て同じコーディングで済みます

�オブジェクト指向と例外処理に対応しています

Copyright 2015 konekto, Inc

Page 33: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

# 34

データベースPDO

�PDOのクラス

�PDO

�RDBMSへの接続を保持するクラス

�PDOStatement

�SQLの実行、結果セットとして返される

�PDOException

�PDOStatementが投げる例外のクラス

Copyright 2015 konekto, Inc

Page 35: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

# 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に標準バンドルされているライブラリ

例題ファイル

処理内容 ファイル名

参照 select2.php

挿入 insert2.php

更新 update2.php

削除 delete2.php

# 40Copyright 2015 konekto, Inc

Page 41: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

IBMiとPHPの連係

Copyright 2015 konekto, Inc

Page 46: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

DB2/400への接続:概要

�PHPからDB2/400を操作可能

db2関数

# 46Copyright 2015 konekto, Inc

Page 47: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

IBM iとの連携:概要

�PHPからIBM i に接続

�プログラムの実行

�システム資源の参照

CL RPG

スプール

ジョブログ

システム値

オブジェクト一覧

db2関数XML Toolkit RPG

# 50Copyright 2015 konekto, Inc

Page 51: PHPデータベース基本 · ビルトイン関数 処理速度が速い データベースごとに異なったコーディングが必要 PEAR DB PHPに標準バンドルされているライブラリ

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に標準バンドルされているライブラリ

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