要建置 PDO_CUBRID 擴充功能,CUBRID DBMS 必須與 PHP 安裝在同一個系統上。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() 開始交易,它會自動停用自動提交模式,並在 PDO::commit() 或 PDO::rollBack() 之後恢復它。
注意:在停用自動提交模式之前,任何待處理的工作都會自動提交。
PDO_CUBRID 支援多個 SQL 陳述式。多個 SQL 陳述式以分號 (;
) 分隔。
PDO_CUBRID 實作了 PDO::cubrid_schema() 來取得綱要資訊。
PDO_CUBRID 支援 BLOB/CLOB 資料類型。PDO 中的 LOB 表示為串流,因此您可以透過繫結串流來插入 LOB,並透過讀取 CUBRID PDO 返回的串流來取得 LOB。例如
範例 #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)。對於 Tuple 可能發生髒讀、不可重複讀或幻讀,對於表格也可能發生不可重複讀。 |
PDO::TRAN_COMMIT_CLASS_COMMIT_INSTANCE |
相對較低的隔離等級 (2)。不會發生髒讀,但可能發生不可重複讀或幻讀。 |
PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCE |
CUBRID 的預設隔離等級 (3)。對於 Tuple 可能發生髒讀、不可重複讀或幻讀,但可確保表格的重複讀取。 |
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 |
獲取兩個表格的參考關係。 |