要构建 PDO_CUBRID 扩展,必须在与 PHP 相同的系统上安装 CUBRID DBMS。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 支持自动提交模式和事务,并且默认情况下启用自动提交模式。您可以使用 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 中插入 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 中插入集合时指定数据类型
<?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 |
获取两个表的引用关系。 |