Jak skamarádit Nette a Oracle DB?
- pesMamlas
- Člen | 8
Zdravím
na localu mám databázi v MySQL a projekt v PHP v5.6. Pro přístup do databáze jsem vyzkoušel Nette/Database/Connection a dále DIBI. Obojí funguje jak má a není žádný problém. Nyní bych chtěl projekt převést na server, který jede na stejné verzi PHP, ALE databáze je Oracle.
V případě připojení přes Nette/Database/Connection, se v Tracy zobrazí testovací QUERY (SELECT * FROM foo) s 0 výsledků (to je špatně). Při pokusu o zobrazení neexistujícího sloupce Tracy vyhodí chybu. Tím jsem si jist, že komunikace funguje, jen nevypisuje výsledky (rows).
Horší to je v případě DIBI, kdy se při pokusu o načtení dat z DB načítá stránka a nakonec vyhodí chybu 500 bez Tracy.
Připojení incializuji přes construktor:
function __construct(\Dibi\Connection $database) {
$this->database = $database;
}
Zde je nastaveni config v případě dibi na locale:
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
dibi:
driver: mysql
port: 1521
database: foo
username: 'root'
password:
lazy: TRUE
Věděl by někdo v čem může být zakopaný pes?
Díky moc
Editoval pesMamlas (6. 10. 2020 7:45)
- Pavel Kravčík
- Člen | 1180
Ahoj, my jedeme bez DIBI nějak takhle:
dsn: 'oci:dbname=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = XXX) (SID = ORCL)));charset=UTF8'
- pesMamlas
- Člen | 8
Pavel Kravčík napsal(a):
Ahoj, my jedeme bez DIBI nějak takhle:
dsn: 'oci:dbname=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = XXXXX)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = XXX) (SID = ORCL)));charset=UTF8'
Ahoj,
takhle jsem to rozjel na produkčním serveru bez DIBI.
V Tracy se objeví připojení i ta jedna query, kterou to
chci otestovat, ale výsledek je 0 rows, i když v tabulce
databáze je záznamů 20. Když jsem to rozjížděl bez Nette, tak mi
oci_connect výsledek vyhodil jak měl.
Vůbec mě nenapadá, jaké může být omezení, že to s DB komunikuje (hlídá to názvy sloupců), ale data to nevyhodí žádná.
V presenteru fetchuju data takto přes fetch/fetchAll/query (query jako v Tracy ok, data žádná):
$this->template->foo = $this->database->fetchAll("SELECT * FROM foo");
Editoval pesMamlas (6. 10. 2020 9:20)
- Zdeno1981
- Člen | 114
Ahoj,
používám Oracle Database jak na Nette Database (bez Explorer) tak na dibi, obě fungují.
Pokud nemáš nakonfigurované tnsnames.ora, můžeš udělat konfiguraci nějak takto:
Nette Database:
database:
dsn: 'oci:dbname=(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521)))(CONNECT_DATA=(SID=name))'
user:
password:
options:
lazy: yes
dibi:
dibi:
driver: oracle
username:
password:
database: '(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521)))(CONNECT_DATA=(SID=name)))'
lazy: true
charset: utf8
- pesMamlas
- Člen | 8
Zdeno1981 napsal(a):
Ahoj,
používám Oracle Database jak na Nette Database (bez Explorer) tak na dibi, obě fungují.
Pokud nemáš nakonfigurované tnsnames.ora, můžeš udělat konfiguraci nějak takto:
Nette Database:
database: dsn: 'oci:dbname=(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521)))(CONNECT_DATA=(SID=name))' user: password: options: lazy: yes
dibi:
dibi: driver: oracle username: password: database: '(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521)))(CONNECT_DATA=(SID=name)))' lazy: true charset: utf8
Takhle mi to funguje na local s MySQL, na produkci mám Oracle a Nette Database mi vrací nula výsledků a DIBI zamrzne a hodí prázdnou stránku bez Tracy. To, že to nefunguje s DIBI to bych třeba oželel, ale že se to tváří, že to komunikuje s DB a nevyhodí to ani jeden ROW, to jsem trošku smutný.
- pesMamlas
- Člen | 8
Tohle mi vyhodí Tracy pro Nette/Database default:
Queries: 1, time: 1.180 ms, default
Time 1.180ms 0 Rows
SELECT *
FROM foo
...\app\presenters\HomepagePresenter.php:22
https://snipboard.io/4n3uWc.jpg
I přes to že v tabulce foo mám 4 záznamy (INSERT a UPDATE fungují). Tuším, že to bude nějaká pitomost, ale nemohu přijít jaká.
Editoval pesMamlas (7. 10. 2020 10:30)