CUBRID Functions (PDO_CUBRID)

简介

PDO_CUBRID is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to CUBRID databases.

注意:

Current version of PDO_CUBRID doesn't support persistent connection now.

安装

To build the PDO_CUBRID extension, the CUBRID DBMS must be installed on the same system as PHP. PDO_CUBRID is a » PECL extension, so follow the instructions in PECL 扩展安装 to install the PDO_CUBRID extension. Issue the configure command to point to the location of the CUBRID base dir as follows:

 $ ./configure --with-pdo-cubrid=/path/to/CUBRID[,shared] 
The configure command defaults to the value of the CUBRID environment variable.

PECL 扩展的 DLL 当前不可用。参见 在 Windows 上构建章节。 Detailed information about installation on Linux and Windows manually, please read build-guide.html in PECL package CUBRID for reference.

PDO_CUBRID Features

Scrollable cursors

PDO_CUBRID supports scrollable cursors. The default cursor type is forward only, and you can use parameter driver_options in PDO::prepare() to change cursor type.

Timeout

PDO_CUBRID supports sql statement execution timeout setting; You can use PDO::setAttribute() to set timeout value.

Autocommit_mode and Transaction

PDO_CUBRID supports both autocommit_mode and transaction, and autocommit_mode is enabled by default. You can use PDO::setAttribute() to change its state.

If you use PDO::beginTransaction() to begin a transaction, it will disable autocommit_mode automatically and restore it after PDO::commit() or PDO::rollBack().

注意: Prior do disabling autocommit_mode any pending work is automatically committed.

Multiple SQL Statements

PDO_CUBRID supports Multiple SQL statements. Multiple SQL statements are separated by semicolons (;).

Schema Information

PDO_CUBRID implements PDO::cubrid_schema() to get schema information.

LOBs

PDO_CUBRID supports BLOB/CLOB data type. The LOB in PDO is represented as a stream, so you can insert LOBs by binding a stream, and get LOBs by reading a stream returned by CUBRID PDO. For example:

示例 #1 Insert LOBs in CUBRID PDO

<?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 Fetch LOBs in CUBRID PDO

<?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

The PDOStatement::getColumnMeta() in CUBRID PDO will return an associative array containing the following values:

  • 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 supports SET/MULTISET/SEQUENCE data type. If you don't specify data type, the default data type is char. For example:

示例 #3 Insert set in CUBRID PDO with default data type.

<?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 Specify data type when insert set in 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 Bind Data Types for the fifth parameter of 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 属性以检查驱动。

The following constants can be used when setting the database attribute. They can be passed to PDO::getAttribute() or PDO::setAttribute().

PDO::CUBRID attribute flags
ConstantDescription
PDO::CUBRID_ATTR_ISOLATION_LEVELTransaction isolation level for the database connection.
PDO::CUBRID_ATTR_LOCK_TIMEOUTTransaction timeout in seconds.
PDO::CUBRID_ATTR_MAX_STRING_LENGTHRead only. The maximum string length for bit, varbit, char, varchar, nchar, nchar varying data types when using CUBRID PDO API.

The following constants can be used when setting the transaction isolation level. They can be passed to PDO::getAttribute() or returned by PDO::setAttribute().

PDO::CUBRID isolation level flags
ConstantDescription
PDO::TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCEThe lowest isolation level (1). A dirty, non-repeatable or phantom read may occur for the tuple and a non-repeatable read may occur for the table as well.
PDO::TRAN_COMMIT_CLASS_COMMIT_INSTANCEA relatively low isolation level (2). A dirty read does not occur, but non-repeatable or phantom read may occur.
PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCEThe default isolation of CUBRID (3). A dirty, non-repeatable or phantom read may occur for the tuple, but repeatable read is ensured for the table.
PDO::TRAN_REP_CLASS_COMMIT_INSTANCEA relatively low isolation level (4). A dirty read does not occur, but non-repeatable or phantom read may.
PDO::TRAN_REP_CLASS_REP_INSTANCEA relatively high isolation level (5). A dirty or non-repeatable read does not occur, but a phantom read may.
PDO::TRAN_SERIALIZABLEThe highest isolation level (6). Problems concerning concurrency (e.g. dirty read, non-repeatable read, phantom read, etc.) do not occur.

The following constants can be used when getting schema information. They can be passed to PDO::cubrid_schema().

PDO::CUBRID schema flags
ConstantDescription
PDO::CUBRID_SCH_TABLEGet name and type of table in CUBRID.
PDO::CUBRID_SCH_VIEWGet name and type of view in CUBRID.
PDO::CUBRID_SCH_QUERY_SPECGet the query definition of view.
PDO::CUBRID_SCH_ATTRIBUTEGet the attributes of table column.
PDO::CUBRID_SCH_TABLE_ATTRIBUTEGet the attributes of table.
PDO::CUBRID_SCH_METHODGet the instance method. The instance method is a method called by a class instance. It is used more often than the class method because most operations are executed in the instance.
PDO::CUBRID_SCH_TABLE_METHODGet the class method. The class method is a method called by a class object. It is usually used to create a new class instance or to initialize it. It is also used to access or update class attributes.
PDO::CUBRID_SCH_METHOD_FILEGet the information of the file where the method of the table is defined.
PDO::CUBRID_SCH_SUPER_TABLEGet the name and type of table which table inherites attributes from.
PDO::CUBRID_SCH_SUB_TABLEGet the name and type of table which inherites attributes from this table.
PDO::CUBRID_SCH_CONSTRAINTGet the table constraints.
PDO::CUBRID_SCH_TRIGGERGet the table triggers.
PDO::CUBRID_SCH_TABLE_PRIVILEGEGet the privilege information of table.
PDO::CUBRID_SCH_COL_PRIVILEGEGet the privilege information of column.
PDO::CUBRID_SCH_DIRECT_SUPER_TABLEGet the direct super table of table.
PDO::CUBRID_SCH_PRIMARY_KEYGet the table primary key.
PDO::CUBRID_SCH_IMPORTED_KEYSGet imported keys of table.
PDO::CUBRID_SCH_EXPORTED_KEYSGet exported keys of table.
PDO::CUBRID_SCH_CROSS_REFERENCEGet reference relationship of tow tables.

目录

To Top