Připojení k Oracle DB? – PDOException could not find driver
- Joacim
- Člen | 229
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
Tohle neni vyjimka od nette, ale primo od pdo. Nemas tedy u PDO aktivni pdo_oci
- Joacim
- Člen | 229
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
koukni sem https://forum.nette.org/…cle-databaze treba to pomuze, nakonec jsem se radsi oracle zbavil :)