CUBRID 関数 (PDO_CUBRID)

はじめに

PDO_CUBRID は PHP Data Objects (PDO) インターフェイス を実装したドライバで、PHP から CUBRID データベースにアクセスするためのものです。

注意:

現在のバージョンの PDO_CUBRID は、持続的接続に対応していません。

インストール手順

PDO_CUBRID 拡張モジュールをビルドするには、PHP を動かしているシステム上に CUBRID DBMS をインストールしなければなりません。 PDO_CUBRID は » PECL 拡張モジュールなので、 PECL 拡張モジュールのインストール の手順に従えば PDO_CUBRID をインストールできます。configure コマンドを実行するときに、次のようにして CUBRID のベースディレクトリの場所を指定します。

   $ ./configure --with-pdo-cubrid=/path/to/CUBRID[,shared]
configure コマンドはデフォルトで、環境変数 CUBRID の値を使います。

この PECL 拡張モジュールの DLL は、現在存在しません。 Windows でのビルド も参照ください Linux や Windows への手動でのインストールに関する詳細な情報は、 PECL の CUBRID パッケージに含まれる build-guide.html を参照ください。

PDO_CUBRID の機能

スクロール可能なカーソル

PDO_CUBRID はスクロール可能なカーソルをサポートしており、デフォルトの型は前進のみのカーソルです。 PDO::prepare の driver_options パラメータを使えばカーソルの型を変えることができます。

タイムアウト

PDO_CUBRID は sql ステートメントの実行時のタイムアウトの設定をサポートしています。 PDO::setAttribute を使えばタイムアウトの値を設定できます。

Autocommit_mode およびトランザクション

PDO_CUBRID は自動コミットとトランザクションをサポートしており、 自動コミットモードがデフォルトで有効になっています。 PDO::setAttribute を使えば状態を変更することができます。

PDO::beginTransaction でトランザクションを開始すると autocommit_mode は自動的に無効となり、PDO::commit あるいは PDO::rollBack の後で元の状態に戻します。

注意: autocommit_mode を無効にする前に、 それまでの作業は自動的にコミットされることに注意しましょう。

複数の SQL 文

PDO_CUBRID は複数の SQL 文をサポートしています。 複数の SQL 文はセミコロン (;) で区切られます。

スキーマ情報

PDO_CUBRID では PDO::cubrid_schema 関数を用意しており、これでスキーマ情報を取得します。

LOBs

PDO_CUBRID は BLOB/CLOB データ型をサポートしています。PDO における LOB はストリームで表現されているので、LOB を追加するにはストリームをバインドし、 LOB を取得するには CUBRID PDO が返すストリームを読み込みます。

例1 CUBRID PDO での LOB の追加

<?php
$fp = fopen('lob_test.png', 'rb');

$sql_stmt = "INSERT INTO lob_test(name, content) VALUES('lob_test.png', ?)";

$stmt = $dbh->prepare($sql_stmt);
$ret = $stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$ret = $stmt->execute();
?>

例2 CUBRID PDO での LOB の取得

<?php
$sql_stmt = "SELECT content FROM lob_test WHERE name='lob_test.png'";

$stmt = $dbh->prepare($sql_stmt);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_NUM);

header("Content-Type: image/png");
fpassthru($result[0]);
?>

カラムのメタ情報

CUBRID PDO における PDOStatement::getColumnMeta は、次の値を含む連想配列を返します。

  • type
  • name
  • table
  • def
  • precision
  • scale
  • not_null
  • auto_increment
  • unique_key
  • multiple_key
  • primary_key
  • foreign_key
  • reverse_index
  • reverse_unique

コレクションデータ型

PDO_CUBRID は SET/MULTISET/SEQUENCE といったコレクションに対応しています。 データ型を省略した場合のデフォルトは char で、次の例のようになります。

例3 CUBRID PDO で、デフォルトのデータ型のセットを追加する例

<?php
$conn_str ="cubrid:dbname=demodb;host=localhost;port=33000";
$cubrid_pdo = new PDO($conn_str, 'dba', '');

$cubrid_pdo->exec("DROP TABLE if exists test_tbl"); 
$cubrid_pdo->exec("CREATE TABLE test_tbl (col_1 SET(VARCHAR))");
 
$sql_stmt_insert = "INSERT INTO test_tbl VALUES (?);";
$stmt = $cubrid_pdo->prepare($sql_stmt_insert);
$data = array("abc","def","ghi");
$ret = $stmt->bindParam(1, $data, PDO::PARAM_NULL);
$ret = $stmt->execute();
var_Dump($ret);
?>

例4 CUBRID PDO でのセットの追加でデータ型を指定する例

<?php
$conn_str ="cubrid:dbname=demodb;host=localhost;port=33000";
$cubrid_pdo = new PDO($conn_str, 'dba', '');

$cubrid_pdo->exec("DROP TABLE if exists test_tbl"); 
$cubrid_pdo->exec("CREATE TABLE test_tbl (col_1 SET(int))");
 
$sql_stmt_insert = "INSERT INTO test_tbl VALUES (?);";
$stmt = $cubrid_pdo->prepare($sql_stmt_insert);
$data = array(1,2,3,4);
$ret = $stmt->bindParam(1, $data, 0,0,"int");
$ret = $stmt->execute();
var_Dump($ret);
?>

CUBRID のバインドデータ型 ( PDOStatement::bindParam の五番目のパラメータ):

  • CHAR
  • STRING
  • NCHAR
  • VARNCHAR
  • BIT
  • VARBIT
  • NUMERIC
  • NUMBER
  • INT
  • SHORT
  • BIGINT
  • MONETARY
  • FLOAT
  • DOUBLE
  • DATE
  • TIME
  • DATETIME
  • TIMESTAMP

定義済み定数

このドライバでは以下の定数が定義されて います。これは拡張モジュールが PHP に組み込まれているか、実行時に動的にロード されている場合のみ使用可能です。さらに、これらのドライバ固有の定数は そのドライバを使用している場合にのみ使用されます。 あるドライバ固有の属性を別のドライバで使うと、予期せぬ結果を引き起こします。 もし複数のドライバを使用しているコードを実行している場合、 PDO::getAttributePDO::ATTR_DRIVER_NAME 属性を使用することで、使用中のドライバ名を調べることが可能です。

これらの定数を使ってデータベースの属性を設定します。これらの定数は PDO::getAttribute あるいは PDO::setAttribute に渡します。

PDO::CUBRID 属性フラグ
定数 説明
PDO::CUBRID_ATTR_ISOLATION_LEVEL データベース接続に指定するトランザクション分離レベル。
PDO::CUBRID_ATTR_LOCK_TIMEOUT トランザクションのタイムアウト秒数。
PDO::CUBRID_ATTR_MAX_STRING_LENGTH 読み込み専用。CUBRID PDO API を使うときの bit, varbit, char, varchar, nchar, nchar varying データ型の最大文字数。

これらの定数を使ってトランザクション分離レベルを設定します。これらの定数は PDO::getAttribute に渡したり PDO::setAttribute から返されたりします。

PDO::CUBRID 分離レベルフラグ
定数 説明
PDO::TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE 最も低い分離レベル (1)。タプルについて ダーティリード、ノンリピータブルリード、ファントムリードが発生し、 テーブルについてもノンリピータブルリードが発生します。
PDO::TRAN_COMMIT_CLASS_COMMIT_INSTANCE 比較的低い分離レベル (2)。ダーティリードは発生しませんが、 ノンリピータブルリードやファントムリードは発生します。
PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCE CUBRID のデフォルトの分離レベル (3)。タプルについては ダーティリード、ノンリピータブルリード、ファントムリードが発生しますが、 テーブルについてはリピータブルリードが保証されています。
PDO::TRAN_REP_CLASS_COMMIT_INSTANCE 比較的低い分離レベル (4)。ダーティリードは発生しませんが、 ノンリピータブルリードやファントムリードは発生します。
PDO::TRAN_REP_CLASS_REP_INSTANCE 比較的高い分離レベル (5)。ダーティリードやノンリピータブルリードは発生しませんが、 ファントムリードは発生します。
PDO::TRAN_SERIALIZABLE 最も高い分離レベル (6)。並行性に関する問題 (ダーティリード、ノンリピータブルリード、ファントムリードなど) は発生しません。

これらの定数を使ってスキーマ情報を取得します。これらの定数は PDO::cubrid_schema に渡します。

PDO::CUBRID スキーマフラグ
定数 説明
PDO::CUBRID_SCH_TABLE CUBRID のテーブルの名前と型を取得します。
PDO::CUBRID_SCH_VIEW CUBRID のビューの名前と型を取得します。
PDO::CUBRID_SCH_QUERY_SPEC ビューのクエリ定義を取得します。
PDO::CUBRID_SCH_ATTRIBUTE テーブルのカラムの属性を取得します。
PDO::CUBRID_SCH_TABLE_ATTRIBUTE テーブルの属性を取得します。
PDO::CUBRID_SCH_METHOD インスタンスメソッドを取得します。インスタンスメソッドはクラスのインスタンスからコールされるメソッドです。 たいていの操作はインスタンス上で行われるので、クラスメソッドよりも頻繁に使います。
PDO::CUBRID_SCH_TABLE_METHOD クラスメソッドを取得します。クラスメソッドはクラスオブジェクトからコールされるメソッドです。 新しいクラスのインスタンスを作ったり初期化したりするときによく使います。 また、クラスの属性にアクセスしたりそれを更新したりするときにも使います。
PDO::CUBRID_SCH_METHOD_FILE テーブルのメソッドが定義されているファイルの情報を取得します。
PDO::CUBRID_SCH_SUPER_TABLE このテーブルの属性の継承元のテーブルの名前と型を取得します。
PDO::CUBRID_SCH_SUB_TABLE このテーブルの属性を継承しているテーブルの名前と型を取得します。
PDO::CUBRID_SCH_CONSTRAINT テーブルの制約を取得します。
PDO::CUBRID_SCH_TRIGGER テーブルのトリガーを取得します。
PDO::CUBRID_SCH_TABLE_PRIVILEGE テーブルの権限情報を取得します。
PDO::CUBRID_SCH_COL_PRIVILEGE カラムの権限情報を取得します。
PDO::CUBRID_SCH_DIRECT_SUPER_TABLE 直接の親テーブルを取得します。
PDO::CUBRID_SCH_PRIMARY_KEY テーブルの主キーを取得します。
PDO::CUBRID_SCH_IMPORTED_KEYS テーブルのインポートしたキーを取得します。
PDO::CUBRID_SCH_EXPORTED_KEYS テーブルのエクスポートしたキーを取得します。
PDO::CUBRID_SCH_CROSS_REFERENCE ふたつのテーブルの参照関係を取得します。

目次