PHP Conference Japan 2024

CUBRID 函式 (PDO_CUBRID)

簡介

PDO_CUBRID 是一個實作 PHP 資料物件 (PDO) 介面 的驅動程式,允許從 PHP 存取 CUBRID 資料庫。

注意:

目前版本的 PDO_CUBRID 不支援持續性連線。

安裝

要建置 PDO_CUBRID 擴充功能,CUBRID DBMS 必須與 PHP 安裝在同一個系統上。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() 來設定逾時值。

自動提交模式和交易

PDO_CUBRID 支援自動提交模式和交易,預設情況下會啟用自動提交模式。您可以使用 PDO::setAttribute() 來更改其狀態。

如果您使用 PDO::beginTransaction() 開始交易,它會自動停用自動提交模式,並在 PDO::commit()PDO::rollBack() 之後恢復它。

注意在停用自動提交模式之前,任何待處理的工作都會自動提交。

多個 SQL 陳述式

PDO_CUBRID 支援多個 SQL 陳述式。多個 SQL 陳述式以分號 (;) 分隔。

綱要資訊

PDO_CUBRID 實作了 PDO::cubrid_schema() 來取得綱要資訊。

大型物件 (LOBs)

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]);
?>

欄位中繼資料 (Column meta)

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)

集合資料類型 (Collection Data Type)

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::getAttribute() 來獲取 PDO::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)。對於 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 結構描述旗標
常數 說明
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 獲取兩個表格的參考關係。

目錄

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top