ecphp/doctrine-oci8 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ecphp/doctrine-oci8

最新稳定版本:1.0.0

Composer 安装命令:

composer require ecphp/doctrine-oci8

包简介

Doctrine's OCI8 (Oracle) driver with cursor support.

README 文档

README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage Read the Docs License

Doctrine OCI8 Driver

The Doctrine OCI8 driver with cursor support, for PHP >= 7.4.

This is a fork of the original package develpup/doctrine-oci8-extended from Jason Hofer.

Installation

composer require ecphp/doctrine-oci8

Configuration

Symfony 5

Use the ecphp/doctrine-oci8-bundle to automatically configure the parameters.

If you prefer modifying the configuration, edit the doctrine.yaml as such:

doctrine:
    dbal:
        driver_class: EcPhp\DoctrineOci8\Doctrine\DBAL\Driver\OCI8\Driver
        types:
            cursor:  EcPhp\DoctrineOci8\Doctrine\DBAL\Types\CursorType

Usage

<?php

namespace App;

use Doctrine\DBAL\Types\Type;
use EcPhp\DoctrineOci8\Doctrine\DBAL\Types\CursorType;
use EcPhp\DoctrineOci8\Doctrine\DBAL\Driver\OCI8\Driver;

include __DIR__ .'/vendor/autoload.php';

// Register the custom type.
if (false === Type::hasType('cursor')) {
    Type::addType('cursor', CursorType::class);
}

$config = new Doctrine\DBAL\Configuration();
$params = [
    'dbname'      => 'database_sid',
    'user'        => 'database_username',
    'password'    => 'database_password',
    'host'        => 'database.host',
    'port'        => 1521,
    'persistent'  => true,
    'driverClass' => Driver::class, // This is where we load the driver.
];
$conn = Doctrine\DBAL\DriverManager::getConnection($params, $config);

$stmt = $conn->prepare('BEGIN MY_STORED_PROCEDURE(:user_id, :cursor); END;');
$stmt->bindValue('user_id', 42);
$stmt->bindParam('cursor', $cursor, \PDO::PARAM_STMT);
$stmt->execute();

/** @var $cursor EcPhp\DoctrineOci8\Doctrine\DBAL\Driver\OCI8\OCI8Cursor */
$cursor->execute();

while ($row = $cursor->fetch()) {
    print_r($row);
    echo PHP_EOL;
}

$cursor->closeCursor();
$stmt->closeCursor();

Types

For OCI8 types that are not represented by PDO::PARAM_ constants, pass OCI8::PARAM_ constants as the type argument of bindValue() and bindParam().

Cursors

Cursors can be specified as PDO::PARAM_STMT, OCI8::PARAM_CURSOR, or just 'cursor'. Only the bindParam() method can be used to bind a cursor to a statement.

Sub-Cursors

Cursor resources returned in a column of a result set are automatically fetched. You can change this behavior by passing in one of these fetch mode flags:

  • OCI8::RETURN_RESOURCES to return the raw PHP resources.
  • OCI8::RETURN_CURSORS to return the OCI8Cursor objects that have not yet been executed.
use Doctrine\DBAL\Driver\OCI8\OCI8;

$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC+OCI8::RETURN_CURSORS);
$rows = $stmt->fetchAll(\PDO::FETCH_BOTH+OCI8::RETURN_RESOURCES);

Special thanks to Michal Tichý for his patch.

Tests

In order to have a working development environment, tests are Docker based.

To run the tests, do the following steps

  1. cp .env.example .env
  2. docker-compose up -d
  3. docker-compose exec php ./vendor/bin/phpunit
  4. CTRL+C
  5. docker-compose down

统计信息

  • 总下载量: 5.62k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: BSD-3-Clause
  • 更新时间: 2021-02-16