Připojení k Oracle DB? – PDOException could not find driver

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Joacim
Člen | 229
+
0
-

Konfigurace:
Nette: 2.2.4
Linux Cent OS 64bit – Apache
Mysql – nastaveno jako defaultní databáze

php:
	date.timezone: Europe/Prague

database:
	dsn: 'mysql:host=127.0.0.1;dbname=test'
	user: test
	password: test
	options:
		lazy: yes

Připojení k Oracle DB mi přes testovací skript funguje bez problémů, ale při použití(Nette) dostanu hlášku: PDOException could not find driver

Dle manuálu jsem nastavil dns na oci

public function renderDefault() {
		$dsn = 'oci:host=10.10.10.10;dbname=TEST/XE';
        $user = 'test';
        $password = 'test';

        $connection = new Connection($dsn, $user, $password, array(
            'lazy' => FALSE
        ));

        $connection->connect();
}

To že tam bude jinak použito TNSNAMEs je mi jasné.

Z oraclu potřebuji vytáhnout jen asi 4 hodnoty – nevím jestli mohu použít config.neon nebo new Connection

David Matějka
Moderator | 6445
+
+1
-

Tohle neni vyjimka od nette, ale primo od pdo. Nemas tedy u PDO aktivni pdo_oci

Joacim
Člen | 229
+
0
-

Už jsem si zkompiloval PDO_OCI driver ale při dotazu na DUAL mi vrátí tuto hlášku

PDOException #IM001
SQLSTATE[IM001]: Driver does not support this function: driver doesn't support meta data

$dsn = 'oci:host=10.10.10.10;dbname=(DESCRIPTION =
                    (ADDRESS_LIST =
                      (ADDRESS =
                        (PROTOCOL = TCP)(HOST = 10.10.10.10)(PORT = 1521)
                      )
                    )
                    (CONNECT_DATA =
                      (SERVICE_NAME = TEST)
                      (SERVER = DEDICATED)
                    )
                  )';
        $user = 'test';
        $password = 'test';

        $connection = new Connection($dsn, $user, $password, array(
            'lazy' => FALSE
        ));

        $connection->connect();

        $oradb = new Context($connection);

        $this->template->sysdate = $oradb->table('DUAL')
                ->select('SYSDATE')
                ->fetchAll();

Jen doufám, že to není další BUG jelikož jsem PDO_OCI musel kompilovat 7 krát

Source file mi označí řádek 152

File: .../vendor/nette/database/src/Database/Helpers.php:152
142:
143:        /**
144:         * Common column type detection.
145:         * @return array
146:         */
147:        public static function detectTypes(\PDOStatement $statement)
148:        {
149:            $types = array();
150:            $count = $statement->columnCount(); // driver must be meta-aware, see PHP bugs #53782, #54695
151:            for ($col = 0; $col < $count; $col++) {
152:                $meta = $statement->getColumnMeta($col);
153:                if (isset($meta['native_type'])) {
154:                    $types[$meta['name']] = self::detectType($meta['native_type']);
155:                }
156:            }

Možná se jen blbě dotazuji přes funkce, ale dotaz mi přes PLSQL dev funguje

Editoval Joacim (27. 3. 2015 10:55)

mshot
Člen | 7
+
0
-

koukni sem https://forum.nette.org/…cle-databaze treba to pomuze, nakonec jsem se radsi oracle zbavil :)