elie29/oci-driver

OCI 驱动程序

v1.0.20 2021-06-21 08:09 UTC

README

文档

文本文件编码

  • UTF-8

代码风格格式化器

  • PSR-2

安装

运行以下命令通过 Composer 安装

composer require elie29/oci-driver

入门

OCI 查询构建器提供了一个轻量级的构建器,用于动态创建 SQL 查询。它不会对查询进行任何验证。

选择构建器

// SELECT * FROM params ORDER BY name ASC
$sql = Select::start() // aka (new Select)
    ->column('*')
    ->from('params')
    ->orderBy('name')
    ->build();

带有联合的选择构建器

// SELECT p.id FROM params p UNION SELECT p.id FROM params_his p ORDER BY id ASC
$sql = Select::start() // aka (new Select)
    ->column('p.id')
    ->from('params', 'p')
    ->union()
    ->column('p.id')
    ->from('params_his', 'p')
    ->orderBy('id')
    ->build();

删除构建器

// DELETE FROM params WHERE id = 2
$sql = Delete::start() // aka (new Delete)
    ->from('params')
    ->where('id = 2')
    ->build();

更新构建器

// UPDATE users u SET u.name = 'O''neil' WHERE u.user_id = 1
$sql = Update::start() // aka (new Update)
    ->table('users', 'u')
    ->set('u.name', Update::quote("O'neil"))
    ->where('u.user_id = 1')
    ->build();

插入构建器

// INSERT INTO params (user_id, name) VALUES (:id, :name)
$sql = Insert::start() // aka (new Insert)
    ->into('params')
    ->values([
        'user_id' => ':id',
        'name'    => ':name',
    ])
    ->build();

更多示例可以在 tests/OCI/Query/Builder 文件夹中找到。

使用 OCI 驱动程序类

使用工厂

工厂将自动修改会话(参见 OCI\Driver\Helper\SessionInit.php),以修复 NLS_TIME_FORMAT 和 NLS_NUMERIC_CHARACTERS。因此,我们不需要使用 to_char 或 to_date 来转换格式,尤其是在与给定日期比较时

$driver = Factory::create(Provider::getConnection(), 'test');

$sql = 'SELECT * FROM A1 WHERE N_DATE BETWEEN :YESTERDAY AND :TOMORROW';

$bind = (new Parameter())
    ->add(':YESTERDAY', date(Format::PHP_DATE, time() - 86400)) // N_DATE type is DATE
    ->add(':TOMORROW', date(Format::PHP_DATE, time() + 86400));

$rows = $driver->fetchAllAssoc($sql, $bind);

插入/更新示例

使用自动提交

自动提交是 OCI 驱动程序默认行为

$connection = oci_pconnect('username', 'pass', 'schema', 'UTF8');
$driver = Factory::create($connection, 'dev');

$sql = 'INSERT INTO A1 (N_NUM) VALUES (5)';
$count = $driver->executeUpdate($sql);
echo $count; // displays 1

使用事务

为了开始一个事务,您应该使用 beginTransaction 如下所示

$connection = oci_pconnect('username', 'pass', 'schema', 'UTF8');
$driver = Factory::create($connection, 'dev');

$driver->beginTransaction();

try {
   $count = $driver->executeUpdate($sql);
   $driver->commitTransaction();
   echo $count; // displays 1
} catch (DriverException $e) {
   echo $e->getMessage();
}

注意:当使用事务时发生错误,会自动调用 rollback。

绑定参数

$connection = oci_pconnect('username', 'pass', 'schema', 'UTF8');
$driver = Factory::create($connection, 'dev');

$sql = 'INSERT INTO A1 (N_CHAR, N_NUM, N_NUM_3) VALUES (:N1, :N2, :N3)';

$parameter = (new Parameter())
    ->add(':N1', 'c')
    ->add(':N2', 1)
    ->add(':N3', 0.24);

$count = $driver->executeUpdate($sql, $parameter);
echo $count; // displays 1

获取一行

$connection = oci_pconnect('username', 'pass', 'schema', 'UTF8');
$driver = Factory::create($connection, 'dev');

$sql = 'SELECT * FROM A1 WHERE N_NUM = 2';

$row = $driver->fetchAssoc($sql);

注意:对于绑定参数,请遵循上面的插入示例。

获取多行

$connection = oci_pconnect('username', 'pass', 'schema', 'UTF8');
$driver = Factory::create($connection, 'dev');

$sql = 'SELECT * FROM A1';

$rows = $driver->fetchAllAssoc($sql);

注意:对于绑定参数,请遵循上面的插入示例。

为测试做准备

在启动单元测试之前,您应该遵循以下步骤

创建 A1 和 A2 表

为了启动测试,A1 和 A2 表应该按照以下方式创建

    CREATE TABLE A1
    ("N_CHAR" CHAR(5 BYTE),
     "N_NUM" NUMBER,
     "N_NUM_3" NUMBER(6,3),
     "N_VAR" VARCHAR2,
     "N_CLOB" CLOB,
     "N_DATE" DATE,
     "N_TS" TIMESTAMP,
     "N_LONG" LONG);

    CREATE TABLE A2
    ("N_LONG_RAW" LONG RAW);

重命名配置文件

将 ./tests/OCI/Helper 中的 config-connection.php.dist 重命名为 config-connection.php

   mv config-connection.php.dist config-connection.php

修改配置

根据您的 Oracle 数据库信息修改 USERNAME、PASSWORD 和 SCHEMA

SCHEMA 可以是以下之一

  • 如果您在相同的数据库服务器上执行测试或您在 tnsnames.ora 中配置了 SID,则可以使用 SID 名称

  • IP:PORT/SID 例如:11.22.33.25:12005/HR

  • 使用以下 TNS

    (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DATABASE_IP)(PORT=DATABASE_PORT))(CONNECT_DATA=(SID=DATABASE_SCHEMA)(SERVER=DEDICATED|POOLED)))

开发前提条件

代码风格格式化器

  • Zend Framework 编码标准

Composer 命令

  • clean:清除所有生成的文件
  • test:启动 clean 和 php 单元测试
  • cover:启动单元测试和本地服务器
  • cs-check:用于代码检查
  • cs-fix:用于代码修复
  • check:启动 cs-checktest

Ant 命令

此项目使用 build.xml 执行静态分析和生成项目文档。

为了启动 ant,您应该安装 apache-ant

  • 运行 ant -p 打印默认和主要目标。