• 検索結果がありません。

Microsoft PowerPoint - PHPデータベース.ppt [互換モード]

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - PHPデータベース.ppt [互換モード]"

Copied!
52
0
0

読み込み中.... (全文を見る)

全文

(1)

PHPデータベース基本

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

(2)

データベース基本

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

# 2

(3)

# 3

データベース

基礎知識



データベースとは



特定のテーマに沿ったデータを集めて管理

し、容易に検索・抽出などの再利用をでき

るようにしたもの



データベースの管理はDBMS(データベー

ス管理システム)が行う

(4)

# 4

データベース

基礎知識



RDBMSとは



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



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



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

して表現



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

カラム

レコード

テーブル

(5)

# 5

データベース

リレーション



リレーションとは



関連する値を通じて結合して表を作成(重複)

カラム

テーブル

Copyright 2015 konekto, Inc

ID

部署No

名前

内線番号

1

11

佐藤

1111

2

22

田中

1112

3

33

山田

1113

部署No

部門名

ロケーション

11

システム部

研究所

22

営業部

営業所

33

総務部

本社

ID

名前

部門名

ロケーション

1

佐藤

システム部

研究所

2

田中

営業部

営業所

3

山田

総務部

本社

(6)

# 6

データベース

基礎知識



主なRDBMS



MySQL



PostgreSQL



Oracle



DB2



MSSQL



その他



Access, Firebird, Cloudscape...

(7)

# 7

データベース

基礎知識



データベースの役割



大量のデータを多数のユーザのもとで一元管理を

行うことが可能

DBサーバ

Webサーバ

SQL処理

管理者

一般ユーザ

Webアプリ

(8)

# 8

データベース

SQL



SQLとは



SQL: Structured Query Language



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



RDBMSにおいて、データの操作や定義

を行うためのデータベース言語(問い合わ

せ言語)

(9)

# 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文

(10)

# 10

データベース

SQL



SQLの互換性



原則的にANSI / JIS に準拠



最低限の互換性が保証されているが、各RDBMS

によって独自拡張機能が数多くあり、その部分の

互換性は確保されていない



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

必要

(11)

PHPのデータベース環境

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

# 11

(12)

# 12

PHPデータベース機能



PHPからデータベースを利用する



データベースサーバに接続するには以下の3つの方法

があります



ビルトイン関数



処理速度が速い



データベースごとに異なったコーディングが必要



PEAR DB



PHPに標準バンドルされているライブラリ



データベースの種類に依存しない設計



ビルトイン関数をPHPによってラッピングしているので処理速

度の問題がある



PDO (PHP Data Objects )



PHP5.1以降から標準バンドル



ライトウェイトでデータベースの種類に依存しない設計



Zend Framework にて使用

Copyright 2015 konekto, Inc

ベンダー固有 モジュー

(13)

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

データベース処理

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

# 13

(14)

ベンダー固有モジュール



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

た関数



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



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

# 14

(15)

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



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

# 15

(16)

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 プラグイン

# 16

(17)

PHP環境の確認

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

(18)

PHP環境の確認①

(19)

PHP環境の確認②

(20)

SQLITE3のインストール

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

(21)

インストール手順①



SQLITE3を入手



http://www.sqlite.org/



Precompiled Binaries for Windows

sqlite-shell-win32-x86-3080802.zip

(306.08 KiB)

*2/15現在



適当に展開(別途説明)

(22)

インストール手順②



SQLITE3を実行&データベースファイル

の作成

C:¥SQLITE>sqlite3 test

SQLite version 3.8.8.2 2015-01-30

14:30:45

Enter ".help" for usage hints.



起動時にデータベースファイルを指定します。

存在しない場合には、自動的に作成します。

(23)

インストール手順③

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’を作成します。

(24)

データを挿入入力

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|||

(25)

例題ファイル

処理内容

ファイル名

参照

select.php

挿入

insert.php

更新

update.php

削除

delete.php

# 25

(26)

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();

} ?>

# 26

(27)

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();

} ?>

# 27

(28)

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();

} ?>

# 28

(29)

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();

}

?>

# 29

(30)

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

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

# 30

(31)

抽象化レイヤー



DBA — データベース (dbm 形式) 抽

象化レイヤ



dbx



ODBC — ODBC (Unified)



PDO — PHP Data Objects

# 31

(32)

# 32

PDOの目的



PDO (PHP Data Objects )



PDOは様々なRDBMSを統一的に扱うこ

とが可能です (隠蔽化:カプセル化)



言い換えると一度PDOの使い方を覚えて

しまえば、対応しているRDBMSであれば

全て同じコーディングで済みます



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

ます

(33)

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)

# 33

(34)

# 34

データベース

PDO



PDOのクラス



PDO



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



PDOStatement



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



PDOException



PDOStatementが投げる例外のクラス

(35)

# 35

データベース

PDO



PDOの使い方



PHPスクリプトでデータベースに接続するには

ずデータソース(DSN)を確認する必要があります



DSN (Database Source Name)



データベース接続の際に必要なデータを文字列であらわし

ます

'mysql:host=localhost;dbname=test','user','pass'

DBの種類 DBホスト名 使用するDB名

ユーザ名 パスワード

(36)

# 36

データベース

PDO



PDOの使い方



MySQLへの接続



DSNを引数としてPDOクラスのインスタンス

を生成することでMySQLに接続することがで

きます

$dbh = new PDO('mysql:host=localhost;dbname=test','user','pass');



PDOの切断



スクリプト終了と同時に自動的に切断するが、

明示的に切断したい場合は以下のようにする

$dbh = null;

(37)

# 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に接続してみましょう

(38)

# 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」にデータを挿入す

るスクリプトを作ります

(39)

# 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();

}

(40)

例題ファイル

処理内容

ファイル名

参照

select2.php

挿入

insert2.php

更新

update2.php

削除

delete2.php

# 40

(41)

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();

} ?>

# 41

(42)

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();

}

?>

# 42

(43)

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();

}

?>

# 43

(44)

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();

}

?>

# 44

(45)

IBMiとPHPの連係

(46)

DB2/400への接続:概要



PHPからDB2/400を操作可能

db2関数

# 46

(47)

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

# 47

(48)

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); ?> # 48

(49)

DB2/400への接続:参考情報



Konekto技術情報ページ



http://www.konekto.jp/tech/index.php?

Old%2FZend%20Server%2FIBMi%2Fd

b2func



Ustream(PHP勉強会2011年度)



:TEAM-HALh

# 49

(50)

IBM iとの連携:概要



PHPからIBM i に接続



プログラムの実行



システム資源の参照

CL

RPG

スプール

ジョブログ

システム値

オブジェクト一覧

db2関数

XML Toolkit

RPG

# 50

(51)

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 # 51

(52)

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>"; ?> # 52

参照

関連したドキュメント

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

図 キハダマグロのサプライ・チェーン:東インドネシアの漁村からアメリカ市場へ (資料)筆者調査にもとづき作成 The Yellowfin Tuna Supply Chain: From Fishing Villages in

All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow.. It is neither affiliated with Stack Overflow

画像の参照時に ACDSee Pro によってファイルがカタログ化され、ファイル プロパティと メタデータが自動的に ACDSee

①アプリをアンインストール スタート > 設定 > アプリ > アプリと機能 > Docan Browser5. ②関連ファイル削除(1)

・大都市に近接する立地特性から、高い県外就業者の割合。(県内2 県内2 県内2/ 県内2 / / /3、県外 3、県外 3、県外 3、県外1/3 1/3

口腔の持つ,種々の働き ( 機能)が障害された場 合,これらの働きがより健全に機能するよう手当

※立入検査等はなし 自治事務 販売業