A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							144 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							144 lines
						
					
					
						
							3.3 KiB
						
					
					
				<?php
 | 
						|
/*
 | 
						|
 * Copyright © 2024 ExacTI Technology Solutions. All rights reserved.
 | 
						|
 * GPLv3 General License.
 | 
						|
 * https://exacti.com.br
 | 
						|
 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
 | 
						|
 */
 | 
						|
 | 
						|
namespace Phacil\Framework\Databases\Driver;
 | 
						|
 | 
						|
use Phacil\Framework\Databases\Api\DriverInterface;
 | 
						|
 | 
						|
/** 
 | 
						|
 * Alternative ORDS connection method.
 | 
						|
 * 
 | 
						|
 * @package Phacil\Framework\Databases */
 | 
						|
class OracleORDS implements DriverInterface
 | 
						|
{
 | 
						|
 | 
						|
	const DB_TYPE = 'Oracle';
 | 
						|
 | 
						|
	const DB_TYPE_ID = self::LIST_DB_TYPE_ID['ORACLE'];
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * {@inheritdoc}
 | 
						|
	 */
 | 
						|
	public function getDBType() { 
 | 
						|
		return self::DB_TYPE;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * {@inheritdoc}
 | 
						|
	 */
 | 
						|
	public function getDBTypeId() {
 | 
						|
		return self::DB_TYPE_ID;
 | 
						|
	 }
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var \Phacil\Framework\Databases\Conectors\Oracle\ORDS\Conector
 | 
						|
	 */
 | 
						|
	private $connection = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var \Phacil\Framework\Databases\Conectors\Oracle\ORDS\Model\Query
 | 
						|
	 */
 | 
						|
	private $statement = null;
 | 
						|
 | 
						|
	private $rowCount;
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function __construct($hostname, $username, $password, $database, $port = '8181', $charset = 'UTF8')
 | 
						|
	{
 | 
						|
		try {
 | 
						|
			/** @var \Phacil\Framework\Databases\Conectors\Oracle\ORDS\Conector */
 | 
						|
			$this->connection = \Phacil\Framework\Registry::getInstance()->create(\Phacil\Framework\Databases\Conectors\Oracle\ORDS\Conector::class, [
 | 
						|
				$hostname.$database,
 | 
						|
				\Phacil\Framework\Config::DB_PORT() ?: $port,
 | 
						|
				$username,
 | 
						|
				$password
 | 
						|
			]);
 | 
						|
 | 
						|
		} catch (\PDOException $e) {
 | 
						|
			throw new \Phacil\Framework\Exception('Failed to connect to database. Reason: \'' . $e->getMessage() . '\'');
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function query($sql, $params = array())
 | 
						|
	{
 | 
						|
		return $this->execute($sql, $params);
 | 
						|
	}
 | 
						|
 | 
						|
	public function createStatement() {
 | 
						|
		$this->rowCount = 0;
 | 
						|
 | 
						|
		/** @var \Phacil\Framework\Databases\Conectors\Oracle\ORDS\Model\Query */
 | 
						|
		$this->statement = \Phacil\Framework\Registry::getInstance()->create(\Phacil\Framework\Databases\Conectors\Oracle\ORDS\Model\Query::class);
 | 
						|
	}
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function escape($value)
 | 
						|
	{
 | 
						|
		return str_replace(array("\\", "\0", "\n", "\r", "\x1a", "'", '"'), array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'), $value);
 | 
						|
	}
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function countAffected()
 | 
						|
	{
 | 
						|
		return $this->rowCount;
 | 
						|
	}
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function getLastId()
 | 
						|
	{
 | 
						|
		return null;
 | 
						|
	}
 | 
						|
 | 
						|
	/** {@inheritdoc} */
 | 
						|
	public function isConnected()
 | 
						|
	{
 | 
						|
		if ($this->connection) {
 | 
						|
			return true;
 | 
						|
		} else {
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * {@inheritdoc}
 | 
						|
	 */
 | 
						|
	public function execute($sql, array $params = [])
 | 
						|
	{
 | 
						|
		$this->createStatement();
 | 
						|
		try {
 | 
						|
			$stmt = $this->statement->prepareSQL($sql, $params)->execute();
 | 
						|
 | 
						|
			if (!$stmt) {
 | 
						|
				throw new \Phacil\Framework\Exception('Error preparing query: ' . implode(', ', $this->statement->getError()));
 | 
						|
			}
 | 
						|
 | 
						|
			if ($stmt->getNumRows() && !empty($stmt->getItems())) {
 | 
						|
				/** @var \Phacil\Framework\Databases\Api\Object\ResultInterface */
 | 
						|
				$data = \Phacil\Framework\Registry::getInstance()->create(\Phacil\Framework\Databases\Api\Object\ResultInterface::class, [$stmt->getItems()]);
 | 
						|
				$data->setNumRows($stmt->getNumRows());
 | 
						|
 | 
						|
				$this->rowCount = $stmt->getNumRows();
 | 
						|
				
 | 
						|
				$stmt->close();
 | 
						|
 | 
						|
				return $data;
 | 
						|
			} else {
 | 
						|
				$this->rowCount = $stmt->getNumRows();
 | 
						|
				$stmt->close();
 | 
						|
				return true;
 | 
						|
			}
 | 
						|
		} catch (\PDOException $exception) {
 | 
						|
			throw new \Phacil\Framework\Exception($exception->getMessage());
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 |