elie29 / oci-driver
OCI 驱动程序
Requires (Dev)
- hamcrest/hamcrest-php: ^2.0
- mayflower/php-codebrowser: ^2.0
- mockery/mockery: ^1.0
- pdepend/pdepend: ^2.5
- phploc/phploc: ^4.0
- phpmd/phpmd: ^2.6
- phpmetrics/phpmetrics: ^2.4
- phpstan/phpstan: ^0.10.3
- phpstan/phpstan-mockery: ^0.10.2
- phpunit/phpunit: ^7.1
- sebastian/phpcpd: ^4.1
- symfony/var-dumper: ^4.0
- zendframework/zend-coding-standard: ^1.0
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-check
和test
Ant 命令
此项目使用 build.xml 执行静态分析和生成项目文档。
为了启动 ant
,您应该安装 apache-ant。
- 运行
ant -p
打印默认和主要目标。