オー‐ディー‐ビー‐シー【ODBC】
ODBC
ODBC および DB2 関数 (PDO_ODBC)
導入
PDO_ODBC は PHP Data Objects (PDO) インターフェイスを実装したドライバで、 PHP から ODBC ドライバあるいは IBM DB2 Call Level Interface (DB2 CLI) ライブラリを使用した データベースへのアクセスが可能となります。 PDO_ODBC は、現在 3 種類のデータベースドライバをサポートしています。- ibm-db2
-
DB2 クライアントを使用した、
IBM DB2 Universal Database、Cloudscape および Apache
Derby サーバへのアクセスをサポートします。
- unixODBC
-
unixODBC ドライバマネージャおよびデータベースごとの ODBC
ドライバを使用した、データベースサーバへのアクセスをサポートします。
- generic
-
PDO_ODBC が明示的にサポートしていない ODBC
ドライバマネージャのためのコンパイルオプションを提供します。
Windows では、PDO_ODBC はデフォルトで PHP コアに組み込まれています。 これは Windows ODBC ドライバマネージャに対してリンクされており、 システムの DSN に登録されているあらゆるデータベースに対して PHP から接続することができます。Microsoft SQL Server データベースに接続する際には、このドライバの使用を推奨します。
インストール手順
手順 1. UNIX システムでの PDO_ODBC-
PHP 5.1 では、PDO_ODBC は PHP ソースの中に含まれています。
PDO_ODBC 拡張モジュールを静的モジュールあるいは共有モジュールとして
コンパイルするには次のような
configure コマンドを実行します。
- ibm_db2
-
./configure --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/
PDO_ODBC を ibm-db2 形式でビルドするには、PDO_ODBC をコンパイルするのと同じマシンに DB2 アプリケーション開発用ヘッダが インストールされていなければなりません。DB2 アプリケーション開発ヘッダは DB2 サーバのインストールオプションに 含まれており、また IBM DB2 Universal Database の » サポートサイト からフリーでダウンロードできる DB2 Application Development Client にも含まれています。
configure コマンドに DB2 ライブラリおよび ヘッダの場所を指定しなかった場合は、PDO_ODBC はデフォルトとして /home/db2inst1/sqllib を使用します。 - unixODBC
-
./configure --with-pdo-odbc=unixODBC,/usr/local
configure コマンドに unixODBC ライブラリおよび ヘッダの場所を指定しなかった場合は、PDO_ODBC はデフォルトとして /usr/local を使用します。 - generic
./configure --with-pdo-odbc=generic,/usr/local,libname,ldflags,cflags
実行時設定
php.ini の設定により動作が変化します。表 221. PDO_ODBC 設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| pdo_odbc.connection_pooling | "strict" | PHP_INI_ALL | PHP 5.1.0 以降で使用可能です。 |
| pdo_odbc.db2instance_name | NULL | PHP_INI_SYSTEM |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- pdo_odbc.connection_pooling string
-
ODBC 接続のプール方法を指定します。"strict"、"relaxed" あるいは
"off" ("" と同じ) のいずれかです。このパラメータは、
プールされている既存の接続との比較をどの程度厳密に行うのかを
接続マネージャに指定します。
strictは推奨されているデフォルト設定で、 接続パラメータが完全に一致する場合にのみ既存の接続を使用します。relaxedは、接続パラメータが似ている場合に 既存の接続を使用します。これはキャッシュの再利用率を高めますが、 (例えば) 仮想ホスト間での接続情報がおかしくなってしまう恐れがあります。
この設定は php.ini ファイルでのみ変更可能で、 その内容はプロセス全体に影響します。同じ ODBC ライブラリを使用している すべてのモジュール、たとえば Unified ODBC 拡張モジュール などが影響を受けます。警告 relaxedを共有サーバで使用してはいけません。 これはセキュリティの問題があるためです。ティップ
どうしても変更する必要がない限り、この設定はデフォルトのstrictのままにしておきましょう。 - pdo_odbc.db2instance_name string
-
db2 方式で PDO_ODBC をコンパイルした場合、
Linux および UNIX 上で DB2 インスタンスを指定するための環境変数
DB2INSTANCE の値を設定します。これによって PDO_ODBC
が DB2 ライブラリの場所を見つけられるようになり、
DB2 データベースへのカタログ接続が可能になります。
この設定は php.ini ファイルでのみ変更可能で、 その内容はプロセス全体に影響します。同じ ODBC ライブラリを使用している すべてのモジュール、たとえば Unified ODBC 拡張モジュール などが影響を受けます。
この設定は、Windows 上では何の意味も持ちません。
目次
- PDO_ODBC DSN — ODBC あるいは DB2 データベースに接続する
Unified ODBC 関数
導入
通常の ODBC サポートに加えて、PHP の Unified ODBC 関数では、各々の API を実装するために ODBC API のセマンティックスを借用する複数の データベースにアクセスすることが可能です。ほとんど同じ複数のデータベース ドライバを維持管理する代わりに、これらのドライバは単一の ODBC 関数セットに 統合されています。以下のデータベースが Unified ODBC でサポートされています。 » Adabas D, » IBM DB2, » iODBC, » Solid, » Sybase SQL Anywhere
注意: 上記のデータベースと接続する際に ODBC は使用されません。関数は ODBC 関数として同じ名前と構文を共有していますが、これらのデータベース の専用 API を使用します。この例外は、iODBC です。PHP を iODBC サポート を付けて構築した場合、全ての ODBC 互換のドライバを PHP アプリケーション ドライバが使用可能となります。iODBC は、» OpenLink Software により管理されています。 iODBC に関する詳細および HOWTO を » http://www.iodbc.org/ で参照可能です。
要件
サポートされるデータベースにアクセスするためには、 所定のライブラリがインストールされている必要があります。インストール手順
- --with-adabas[=DIR]
-
Adabas D サポートを有効にします。DIR はAdabas をインストールしたディレクトリで、
/usr/local がデフォルトです。
- --with-sapdb[=DIR]
-
SAP DB サポートを有効にします。DIR は SAP DB のベースインストールディレクトリで、
/usr/local がデフォルトです。
- --with-solid[=DIR]
-
Solidサポートを有効にします。DIR は Solid のベースインストールディレクトリで、
/usr/local/solid がデフォルトです。
- --with-ibm-db2[=DIR]
-
IBM DB2 サポートを有効にします。DIR は IBM DB2 のベースインストールディレクトリで、
/home/db2inst1/sqllib がデフォルトです。
- --with-empress[=DIR]
-
Empress サポートを有効にします。DIR は Empress のベースインストールディレクトリで、
$EMPRESSPATH がデフォルトです。PHP 4 以降、
このオプションは Empress バージョン 8.60 以降のみをサポートします。
- --with-empress-bcs[=DIR]
-
Empress ローカルアクセスサポートを有効にします。DIR は Empress の
ベースインストールディレクトリで、$EMPRESSPATH がデフォルトです。PHP 4 以降、
このオプションは Empress バージョン 8.60 以降のみをサポートします。
- --with-birdstep[=DIR]
-
Birdstep サポートを有効にします。DIR は Birdstep のベースインストールディレクトリで、
/usr/local/birdstep がデフォルトです。
- --with-custom-odbc[=DIR]
-
ユーザ定義の ODBC サポートを有効にします。DIR は ODBC のベースインストールディレクトリで、
/usr/local がデフォルトです。
CUSTOM_ODBC_LIBS が定義され、odbc.h がインクルードパスに
あることを確認してください。
例えば、QNX上 の Sybase SQL Anywhere 5.5.00 では、configure スクリプトを実行する
前に以下を定義する必要があります。
CPPFLAGS="-DODBC_QNX -DSQLANY_BUG"
LDFLAGS=-lunix
CUSTOM_ODBC_LIBS="-ldblib -lodbc".
- --with-iodbc[=DIR]
-
iODBC サポートを有効にします。DIR は iODBC のベースインストールディレクトリで、
/usr/local がデフォルトです。
- --with-esoob[=DIR]
-
Easysoft OOB サポートを有効にします。DIR は OOB のベースインストールディレクトリで、
/usr/local/easysoft/oob/client がデフォルトです。
- --with-unixODBC[=DIR]
-
unixODBC サポートを有効にします。DIR は unixODBC のベースインストールディレクトリで、
/usr/local がデフォルトです。
- --with-openlink[=DIR]
-
OpenLink ODBC サポートを有効にします。DIR は OpenLink のベースインストールディレクトリで、
/usr/local がデフォルトです。
これは、iODBC と同じものです。
- --with-dbmaker[=DIR]
-
DBMaker サポートを有効にします。DIR は DBMaker のベースインストールディレクトリで、
デフォルトは最新版の DBMaker がインストールされている場所
(例えば /home/dbmaker/3.6)です。
PHP 3 で unified ODBC サポートを無効にするには、 --disable-unified-odbc を configure 実行時に 指定します。このオプションは、iODBC, Adabas, Solid, Velocis custom ODBC インターフェイスを 有効にしている場合のみ適用可能です。
Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。
実行時設定
php.ini の設定により動作が変化します。表 219. Unified ODBC 設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| odbc.default_db * | NULL | PHP_INI_ALL | |
| odbc.default_user * | NULL | PHP_INI_ALL | |
| odbc.default_pw * | NULL | PHP_INI_ALL | |
| odbc.allow_persistent | "1" | PHP_INI_SYSTEM | |
| odbc.check_persistent | "1" | PHP_INI_SYSTEM | |
| odbc.max_persistent | "-1" | PHP_INI_SYSTEM | |
| odbc.max_links | "-1" | PHP_INI_SYSTEM | |
| odbc.defaultlrl | "4096" | PHP_INI_ALL | |
| odbc.defaultbinmode | "1" | PHP_INI_ALL |
注意: * マークがついているエントリは未実装です。
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- odbc.default_db string
-
odbc_connect() または
odbc_pconnect()でODBCデータソースが
指定されない場合に使用される ODBC データソース。
- odbc.default_user string
-
odbc_connect() または
odbc_pconnect() で名前が指定されない場合
に使用される名前。
- odbc.default_pw string
-
odbc_connect() または
odbc_pconnect() でパスワードが指定されない場合
に使用されるパスワード。
- odbc.allow_persistent boolean
-
持続的 ODBC 接続を許可するかどうか。
- odbc.check_persistent boolean
-
再利用する前に接続が有効であることを確認します。
- odbc.max_persistent integer
-
プロセス毎の持続的 ODBC 接続の最大数。
- odbc.max_links integer
-
プロセス毎の持続的接続を含む ODBC 接続の最大数。
- odbc.defaultlrl integer
-
LONG フィールドの処理。変数に返されるバイト数を指定します。
integerを使用する際、 その値はバイト単位で測られます。 この FAQ に記載された 短縮表記を使用することも可能です。 - odbc.defaultbinmode integer
-
バイナリデータの処理モード。
リソース型
リソース型は定義されていません。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。- ODBC_TYPE (integer)
- ODBC_BINMODE_PASSTHRU (integer)
- ODBC_BINMODE_RETURN (integer)
- ODBC_BINMODE_CONVERT (integer)
- SQL_ODBC_CURSORS (integer)
- SQL_CUR_USE_DRIVER (integer)
- SQL_CUR_USE_IF_NEEDED (integer)
- SQL_CUR_USE_ODBC (integer)
- SQL_CONCURRENCY (integer)
- SQL_CONCUR_READ_ONLY (integer)
- SQL_CONCUR_LOCK (integer)
- SQL_CONCUR_ROWVER (integer)
- SQL_CONCUR_VALUES (integer)
- SQL_CURSOR_TYPE (integer)
- SQL_CURSOR_FORWARD_ONLY (integer)
- SQL_CURSOR_KEYSET_DRIVEN (integer)
- SQL_CURSOR_DYNAMIC (integer)
- SQL_CURSOR_STATIC (integer)
- SQL_KEYSET_SIZE (integer)
- SQL_CHAR (integer)
- SQL_VARCHAR (integer)
- SQL_LONGVARCHAR (integer)
- SQL_DECIMAL (integer)
- SQL_NUMERIC (integer)
- SQL_BIT (integer)
- SQL_TINYINT (integer)
- SQL_SMALLINT (integer)
- SQL_INTEGER (integer)
- SQL_BIGINT (integer)
- SQL_REAL (integer)
- SQL_FLOAT (integer)
- SQL_DOUBLE (integer)
- SQL_BINARY (integer)
- SQL_VARBINARY (integer)
- SQL_LONGVARBINARY (integer)
- SQL_DATE (integer)
- SQL_TIME (integer)
- SQL_TIMESTAMP (integer)
- SQL_TYPE_DATE (integer)
- SQL_TYPE_TIME (integer)
- SQL_TYPE_TIMESTAMP (integer)
- SQL_BEST_ROWID (integer)
- SQL_ROWVER (integer)
- SQL_SCOPE_CURROW (integer)
- SQL_SCOPE_TRANSACTION (integer)
- SQL_SCOPE_SESSION (integer)
- SQL_NO_NULLS (integer)
- SQL_NULLABLE (integer)
- SQL_INDEX_UNIQUE (integer)
- SQL_INDEX_ALL (integer)
- SQL_ENSURE (integer)
- SQL_QUICK (integer)
目次
- odbc_autocommit — 自動コミットの動作をオンまたはオフにする
- odbc_binmode — バイナリカラムデータを処理する
- odbc_close_all — 全ての ODBC 接続を閉じる
- odbc_close — ODBC 接続を閉じる
- odbc_columnprivileges — カラムおよび付随する権限のリストを取得する際に使用する結果 ID を返す
- odbc_columns — 指定したテーブルにあるカラム名のリストを取得する
- odbc_commit — ODBC トランザクションをコミットする
- odbc_connect — データソースに接続する
- odbc_cursor — カーソル名を得る
- odbc_data_source — 現在の接続についての情報を返す
- odbc_do — odbc_exec() の同義語
- odbc_error — 直近のエラーコードを得る
- odbc_errormsg — 直近のエラーメッセージを得る
- odbc_exec — SQL文を準備し、実行する
- odbc_execute — プリペアドステートメントを実行する
- odbc_fetch_array — 連想配列として結果の行を取得する
- odbc_fetch_into — 一行ぶんの結果を配列に取り込む
- odbc_fetch_object — オブジェクトとして結果の行を取得する
- odbc_fetch_row — 行を取り込む
- odbc_field_len — フィールドの長さ (精度) を得る
- odbc_field_name — カラム名を得る
- odbc_field_num — カラム番号を返す
- odbc_field_precision — odbc_field_len() の同義語
- odbc_field_scale — フィールドの精度を得る
- odbc_field_type — フィールドのデータ型を返す
- odbc_foreignkeys — 指定したテーブルの外部キーのリストまたは指定したテーブルの主キーを 参照する他のテーブルの外部キーのリストを返す
- odbc_free_result — 結果を保持するリソースを開放する
- odbc_gettypeinfo — データソースによりサポートされるデータ型に関する情報を有する結果 ID を返す
- odbc_longreadlen — LONG カラムを処理する
- odbc_next_result — 複数の結果が利用可能などうか確認する
- odbc_num_fields — 結果のカラム数を返す
- odbc_num_rows — 結果における行数を返す
- odbc_pconnect — 持続的なデータベース接続を開く
- odbc_prepare — 実行用に文を準備する
- odbc_primarykeys — テーブルの主キーを有するカラムの名前を取得する際に使用可能な結果 ID を返す
- odbc_procedurecolumns — プロシージャへのパラメータに関する情報を取得する
- odbc_procedures — 指定したデータソースに保存されているプロシージャのリストを取得する
- odbc_result_all — HTML テーブルとして結果を出力する
- odbc_result — 結果データを得る
- odbc_rollback — トランザクションをロールバックする
- odbc_setoption — ODBC の設定を変更する
- odbc_specialcolumns — テーブルのレコードを特定する最適なカラムの組合せ、 またはレコードの値がトランザクションにより更新される際に自動的に更新されるカラムを返す
- odbc_statistics — テーブルに関する統計情報を取得する
- odbc_tableprivileges — 各テーブルのリストおよび関連する権限のリストを取得する
- odbc_tables — 指定したデータソースに保存されたテーブルの名前のリストを取得する
Open Database Connectivity
(Odbc から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 06:50 UTC 版)
ナビゲーションに移動 検索に移動Open Database Connectivity (ODBC) は、関係データベース管理システム (RDBMS) にアクセスするための共通インタフェース (API)である。
データへのアクセスを統一化することを目的としており、たとえばクライアント/サーバ型ではないMicrosoft Accessの管理するデータベースファイル (MDB) や、そもそもRDBMSではないCSVファイルへのアクセスなども、それに対応するODBCドライバがあれば、他の一般的なデータベースへのアクセスするのと同様な方法で利用することが可能になる。
ODBCは、主にWindows上で利用されることが多いが、Linux、UNIXなどで利用されるケースもある。
概要
従来、データベースアプリケーションは、RDBMSベンダーが製品とともに配布するユーティリティや埋め込みSQLにより開発されてきたが、C言語上のAPIレベルで統一したインターフェイスとしてデータベースに接続するためのAPIをまとめたのが、マイクロソフトが1992年に発表した「ODBC」である。
その後、ODBC3.0では、X/OpenコンソーシアムとISOで進められていた標準化にあわせることとなり、これは1995年に「SQL/CLI」としてSQL標準の一部となった。
X/OpenとISOが進めていたSQL/CLIは、ODBCの有用性から業界標準となったODBCを標準規格化するための試みであり、それにマイクロソフトが同調した形で標準化がなされた経緯がある。そのため、ODBCもしくはSQL/CLIは多くのRDBMSでサポートされており、且つ、ODBCはほとんどの場合でSQL/CLIのスーパーセットとなっている。
建前上は、ODBCを利用することにより、データベースの各ベンダ固有のインターフェースを抽象化し統一的にアクセスできるようになるはずだが、単純なケースはともかく、実際にはSQLの文法が各ベンダによって方言があるように、接続以外の問題でデータベースごとの仕様(例えばロック)や特性を理解する必要がなくなるわけではない。
バージョンの歴史
バージョンの歴史:[1]
- 1.0: 1992年9月にリリース[2]
- 2.0: c. 1994
- 2.5
- 3.0: c. 1995, IntersolvのJohn Goodson と IBMのFrank Pellow ・Paul Cotton が重要なインプットをODBC 3.0に提供した[3]
- 3.5: c. 1997
- 3.8: c. 2009, Windows 7と共に[4]
近年の状況
最近ではWindowsにおいてもC言語によってODBCを直接利用することは少なくなっており、Visual Basic (VB)などでは、COMとしてVBから直接扱えるADO (ActiveX Data Objects)の下部レイヤーの選択肢の1つとして利用される事が多い。(ADOは、ODBCに代わりOLE DBと呼ばれるプロバイダを選択することでデータベース固有の接続方法を抽象化するが、既存のODBCとの接続のためのラップである「OLE DB Provider for ODBC」を使うこともできる。)
しかし、一方で、SQL Server 2014以降ではOLE DBは今後更新されず、汎用的な接続方法としてはODBCに回帰する方向性も示されている。[5][6]
.NET FrameworkではADOと同じような考え方であるが、マネージド環境となるため、これらのプロバイダは一新されている。ただし、従来のOLE DBも使えるため、OLE DBを経由したODBCへのアクセスは今日でも利用可能ではある。SQL Serverは当然としてオラクルなどの大手RDBMSベンダは.NET Framework用のプロバイダ、もしくはOLE DBプロバイダを提供しており、あえてODBCを経由しなければならないケースは少ないと考えられる。
Javaでは、かつてはJDBCが扱うデータベースドライバとしてType1ドライバ(JDBC-ODBCブリッジ)としてJDBCの下層の物理ドライバに使われており、まだJavaに対応していないデータベースに接続する場合などの手段として使われる場合もあったが、今日では多くのデータベースがJDBCドライバを出しており、ODBCを経由させる必要性はほとんどなくなった[注 1]。
このため、JDBC-ODBCブリッジはJava7では非推奨となり、Java8では標準から削除された。[7]
外部リンク
- Microsoft Universal Data Access
- Online definition of CLI at the Open Groups webpage
脚注
注釈
- ^ SQL Serverでさえ、JDBCドライバを出している
出典
- ^ “ODBC Versions”. Linux/UNIX ODBC. Easysoft. 2015年12月31日閲覧。
- ^ Antal, Tiberiu Alexandru. “Access to an Oracle database using JDBC (PDF)”. Cluj-Napoca: Technical University of Cluj-Napoca. p. 2. 2015年12月31日閲覧。 “ODBC 1.0 was released in September 1992”
- ^ Microsoft Corporation. Microsoft ODBC 3.0 Programmer's Reference and SDK Guide, Volume 1. Microsoft Press. February 1997. (ISBN 978-1572315167)
- ^ “What's New in ODBC 3.8”. Microsoft. 2015年12月31日閲覧。 “Windows 7 includes an updated version of ODBC, ODBC 3.8.”
- ^ http://msdn.microsoft.com/ja-jp/library/cc280510.aspx
- ^ http://blogs.technet.com/b/dataplatforminsider/archive/2011/08/29/microsoft-aligning-with-odbc.aspx
- ^ http://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/bridge.html
|
||||||||||||||
ODBC
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/29 06:34 UTC 版)
「カーソル (データベース)」の記事における「ODBC」の解説
C言語プログラムからSQLを使ってデータベースにアクセスするためのライブラリのひとつとしてODBCがある。ODBCはMicrosoft Windowsで広まった後、業界標準のSQL/CLIやJDBCのベースとなった。 カーソル操作に係るSQLステートメントには、以下のように個別のODBC関数が対応している。 ODBCにおけるカーソル操作ODBC関数対応するSQLステートメントSQLPrepare DECLARE CURSOR SQLExecute OPEN SQLFetch FETCH SQLFreeStmt CLOSE ODBCでは、アプリケーションプログラムがカーソルを直接指定することは、ほとんどない。上記の関数はいずれも「ステートメントハンドル」(Statement Handle)を引数としており、このハンドルが指し示すデータ構造の中にカーソルも含まれているという扱いになる。すなわち、ステートメントハンドルがイテレータの役割を果たしている。
※この「ODBC」の解説は、「カーソル (データベース)」の解説の一部です。
「ODBC」を含む「カーソル (データベース)」の記事については、「カーソル (データベース)」の概要を参照ください。
- Odbcのページへのリンク