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]
此 DLL 的 PECL 扩展目前不可用。另请参见 在 Windows 上构建 部分。有关在 Linux 和 Windows 上手动安装的详细信息,请参阅 PECL 包 CUBRID 中的 build-guide.html 以供参考。
PDO_CUBRID 支持可滚动游标。默认游标类型是仅向前,您可以使用 PDO::prepare() 中的参数 driver_options 更改游标类型。
PDO_CUBRID 支持 SQL 语句执行超时设置;您可以使用 PDO::setAttribute() 设置超时值。
PDO_CUBRID 支持 autocommit_mode 和事务,默认情况下启用 autocommit_mode。您可以使用 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,并通过读取 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 中使用默认数据类型插入 set。
<?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 中插入 set 时指定数据类型
<?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 |
获取两个表的引用关系。 |