PHP Connect Oracle DB с использованием единой базы данных Object — Singleton Pattern

PHP скрипт:

class db_singleton
{
const ORACLE_HOST = "SOMEVALIDIP";
const ORACLE_USER = "oracleuser";
const ORACLE_PASS = "oraclepass";
const ORACLE_DB = "SOMEVALIDIP/ORACLEDB";

private static $instance; // stores the instance

private function __construct() { } // block directly instantiating

private function __clone() { } // block cloning of the object/*public static function getInstance() {

if(!self::$instance) {
// instance doesn't exist yet, so create it
self::$instance = new self();
}

// return an instance of this class (Database)
return self::$instance;
}*/

public static function call()
{
// create the instance if it does not exist
if(!isset(self::$instance))
{
// the ORACLE_* constants should be set to or
//  replaced with your db connection details
self::$instance = oci_connect(self::ORACLE_HOST, self::ORACLE_USER, self::ORACLE_PASS, self::ORACLE_DB);
if(self::$instance->connect_error)
{
throw new Exception('Oracle connection failed: ' . self::$instance->connect_error);
}
}
// return the instance
return self::$instance;
}
}

Чтобы сделать запрос, я пишу ниже код:

$result = db_singleton::call()->query("SELECT * FROM some_valid_table");
print_r($result);exit;

Вышесказанное дает исключение:

Fatal error: Call to a member function query() on a non-object

Не уверен насчет подключения Oracle DB использовать PHP Singleton Pattern,

Благодарю.

1

Решение

С php.net

resource oci_connect ( string $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] )

Пример:

// Connects to the XE service (i.e. database) on the "localhost" machine
$conn = oci_connect('username', 'password', 'localhost/XE');
0

Другие решения

oci_connect возвращается resource, Вы должны использовать oci_ семейство функций для извлечения данных из БД, например:

oci_execute(
oci_parse(
db_singleton::call(), 'SELECT * FROM some_valid_table'
)
);

Дополнительные примеры доступны на странице ссылки.

2

По вопросам рекламы [email protected]