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]
この PECL 拡張モジュールの DLL は、現在存在しません。 Windows でのビルド も参照ください Linux や Windows への手動でのインストールに関する詳細な情報は、 PECL の CUBRID パッケージに含まれる build-guide.html を参照ください。
PDO_CUBRID はスクロール可能なカーソルをサポートしており、デフォルトの型は前進のみのカーソルです。 PDO::prepare() の driver_options パラメータを使えばカーソルの型を変えることができます。
PDO_CUBRID は sql ステートメントの実行時のタイムアウトの設定をサポートしています。 PDO::setAttribute() を使えばタイムアウトの値を設定できます。
PDO_CUBRID は自動コミットとトランザクションをサポートしており、 自動コミットモードがデフォルトで有効になっています。 PDO::setAttribute() を使えば状態を変更することができます。
PDO::beginTransaction() でトランザクションを開始すると autocommit_mode は自動的に無効となり、PDO::commit() あるいは PDO::rollBack() の後で元の状態に戻します。
注意: autocommit_mode を無効にする前に、 それまでの作業は自動的にコミットされることに注意しましょう。
PDO_CUBRID は複数の SQL 文をサポートしています。
複数の SQL 文はセミコロン (;
) で区切られます。
PDO_CUBRID では PDO::cubrid_schema() 関数を用意しており、これでスキーマ情報を取得します。
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() は、次の値を含む連想配列を返します。
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() の五番目のパラメータ):
このドライバでは以下の定数が定義されて
います。これは拡張モジュールが PHP に組み込まれているか、実行時に動的にロード
されている場合のみ使用可能です。さらに、これらのドライバ固有の定数は
そのドライバを使用している場合にのみ使用されます。
あるドライバ固有の属性を別のドライバで使うと、予期せぬ結果を引き起こします。
もし複数のドライバを使用しているコードを実行している場合、
PDO::getAttribute() で PDO::ATTR_DRIVER_NAME
属性を使用することで、使用中のドライバ名を調べることが可能です。
これらの定数を使ってデータベースの属性を設定します。これらの定数は PDO::getAttribute() あるいは PDO::setAttribute() に渡します。
定数 | 説明 |
---|---|
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::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_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 |
ふたつのテーブルの参照関係を取得します。 |