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]
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 supports scrollable cursors. The default cursor type is forward only, and you can use parameter driver_options in PDO::prepare() to change cursor type.
PDO_CUBRID supports sql statement execution timeout setting; You can use PDO::setAttribute() to set timeout value.
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.
PDO_CUBRID supports Multiple SQL statements.
Multiple SQL statements are separated by semicolons (;
).
PDO_CUBRID implements PDO::cubrid_schema() to get schema information.
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]);
?>
The PDOStatement::getColumnMeta() in CUBRID PDO will return an associative array containing the following values:
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():
下列常量由此驱动定义,且仅在扩展编译入 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().
Constant | Description |
---|---|
PDO::CUBRID_ATTR_ISOLATION_LEVEL |
Transaction isolation level for the database connection. |
PDO::CUBRID_ATTR_LOCK_TIMEOUT |
Transaction timeout in seconds. |
PDO::CUBRID_ATTR_MAX_STRING_LENGTH |
Read 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().
Constant | Description |
---|---|
PDO::TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE |
The 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_INSTANCE |
A relatively low isolation level (2). A dirty read does not occur, but non-repeatable or phantom read may occur. |
PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCE |
The 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_INSTANCE |
A relatively low isolation level (4). A dirty read does not occur, but non-repeatable or phantom read may. |
PDO::TRAN_REP_CLASS_REP_INSTANCE |
A relatively high isolation level (5). A dirty or non-repeatable read does not occur, but a phantom read may. |
PDO::TRAN_SERIALIZABLE |
The 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().
Constant | Description |
---|---|
PDO::CUBRID_SCH_TABLE |
Get name and type of table in CUBRID. |
PDO::CUBRID_SCH_VIEW |
Get name and type of view in CUBRID. |
PDO::CUBRID_SCH_QUERY_SPEC |
Get the query definition of view. |
PDO::CUBRID_SCH_ATTRIBUTE |
Get the attributes of table column. |
PDO::CUBRID_SCH_TABLE_ATTRIBUTE |
Get the attributes of table. |
PDO::CUBRID_SCH_METHOD |
Get 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_METHOD |
Get 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_FILE |
Get the information of the file where the method of the table is defined. |
PDO::CUBRID_SCH_SUPER_TABLE |
Get the name and type of table which table inherites attributes from. |
PDO::CUBRID_SCH_SUB_TABLE |
Get the name and type of table which inherites attributes from this table. |
PDO::CUBRID_SCH_CONSTRAINT |
Get the table constraints. |
PDO::CUBRID_SCH_TRIGGER |
Get the table triggers. |
PDO::CUBRID_SCH_TABLE_PRIVILEGE |
Get the privilege information of table. |
PDO::CUBRID_SCH_COL_PRIVILEGE |
Get the privilege information of column. |
PDO::CUBRID_SCH_DIRECT_SUPER_TABLE |
Get the direct super table of table. |
PDO::CUBRID_SCH_PRIMARY_KEY |
Get the table primary key. |
PDO::CUBRID_SCH_IMPORTED_KEYS |
Get imported keys of table. |
PDO::CUBRID_SCH_EXPORTED_KEYS |
Get exported keys of table. |
PDO::CUBRID_SCH_CROSS_REFERENCE |
Get reference relationship of tow tables. |