Jak se připojit k databázi Firebird?
- Zuben45
- Člen | 268
Dobrý den,
momentálně řeším připojení k databázi Firebird, a stále se mi to
nedaří. Zkoušel jsem nastavit driver na firebird, ale vyskočí mi akorát,
že firebird driver neexistuje. Mám zkušenosti jen s MySQL a vše jde ok, ale
zde už opravdu nevím. Jak bych mohl přidat driver firebird do Nette,
popřípadě jak ho implementovat ?
Děkuji
- Pavel Kravčík
- Člen | 1196
Asi budeš muset použít třeba Dibi, Nette databáze možná nemá ten driver implementovaný.
- Zuben45
- Člen | 268
Zkouším, ale hází mi chybu že třída DibiNetteExtension nebyla nalezena, postupuji přitom podle https://doc.nette.org/cs/database , složku dibi jsem si zkopnul do /webroot/Nette
EDIT: Při prvním kroku to vypíše
Class DibiConnection used in service ‚connection‘ not found or is
not instantiable
config mám
parameters:
database:
host: localhost
user: SYSDBA
password: *****
database: C:\xampp\firebird\monkey.fdb
php:
date.timezone: Europe/Prague
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
- App\Model\UserManager
- App\Forms\SignFormFactory
router: App\RouterFactory::createRouter
connection:
class: DibiConnection(%database%)
Editoval Zuben45 (27. 10. 2015 15:59)
- Jan Mikeš
- Člen | 771
Nejsem sice znalec dibi a v zivotej sem jej nepouzil, ale navod na ktery se
odkazujes je 4 roky stary a verim ze par veci se od te doby zmenilo. Pouze jsem
nakouknul na github: https://github.com/…nnection.php
A vidim, ze trida je nyni v namespace Dibi
takze si ten service
zmen na Dibi\Connection
Zmen tam bude urcite vice, tak bych radil se ridit nejakym novejsim navodem,
pripadne sam prozkoumat zdrojove kody.
Na githubu take vidim, ze jsou k dispozici extensions pro dibi, zkus pouzit je?
- romiix.org
- Člen | 343
Skús použiť Dibi\Bridges\Nette\DibiExtension22. Nie som si istý funkčnosťou s Nette ~2.3, ale je tam šanca.
$ composer require dibi/dibi
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
dibi:
host: localhost
user: SYSDBA
password: *****
database: C\xampp\firebird\monkey.fdb
Neskúšal som to, je to iba tip.
- Zuben45
- Člen | 268
Tak si mi nejspíš povedlo sprovoznit Dibi, vyzkoušel jsem připojení k firebirdu, ale stále problém, vypisuje to: Nemohlo být vytvořeno žádné připojení, protože cílový počítač je aktivně odmítl.
Config
#
# WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
# https://nette.org/en/security-warning
#
parameters:
database:
username: "SYSDBA"
password: ***
host: "localhost"
database: C:\xampp\firebird\MONKEY.FDB
php:
date.timezone: Europe/Prague
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
- App\Model\UserManager
- App\Forms\SignFormFactory
router: App\RouterFactory::createRouter
connection:
class: DibiConnection(%database%)
BasePresenter (v presentru kvůli testu jestli funguje)
<?php
namespace App\Presenters;
use Nette;
use App\Model;
/**
* Base presenter for all application presenters.
*/
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
public $db;
public function beforeRender(){
$this->db = $this->context->getService('connection');
$this->template->test = $this->db->table("test")->fetch();
}
}
Editoval Zuben45 (27. 10. 2015 16:13)
- Miroslav Skopal
- Člen | 5
No nevím jestli jsem ten pravej na odpověď, protože Nette a dibi jsem poprvé vyzkoušel cca týden nazpět. Ale jelikož můj záměr je provozovat Nette ve spojení s Firebirdem, tak sem zkoušel zprovoznit dibi a funguje mi to normálně s následujícími úpravami jedná se o normálně nainstalované poslední nette (sandbox) a dibi přes composer:
config.neon
#
# WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
# https://nette.org/en/security-warning
#
parameters:
php:
date.timezone: Europe/Prague
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
dibi:
driver: firebird
host: localhost
database: MOJEDB
user: SYSDBA
password: ***
services:
router: App\RouterFactory::createRouter
HomepagePresenter.php
<?php
namespace App\Presenters;
use Nette;
use App\Model;
class HomepagePresenter extends BasePresenter
{
protected $db;
public function __construct(\DibiConnection $connection)
{
$this->db = $connection;
}
public function renderDefault()
{
$this->template->anyVariable = 'any value';
$this->template->db_timestamp = $this->db->query('SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE')->fetchSingle();
}
}
?>
parametr databse: MOJEDB odkazuje na alias v konfiguraci firebirda, pokud není alias tak použít normálně cestu k DB souboru.
Podle mě ti tam akorát chybí to nastavení driver:firebird
Můžes si to jednoduše ověřit tak, že když se podívaš do tracy při chybě tak ti to bude stát v třídě pro oblushu mysql a ne firebirdu.
- Zuben45
- Člen | 268
Díky, už se trochu posouvám, nyní mi píše
PHP extension 'interbase' is not loaded.
v PHP.ini mám odkomentováno extension=php_interbase.dll
ve
složce ext\ mám tuto knihovnu, ale když ještě vyzkouším zapnout php.exe
tak mi to napíše
Warning: PHP startup: Unable to load dynamic library 'C:\xampp2\php\ext\php_interbase.dll' - %1 není platná aplikace typu Win32. in Ukonown on line 0
EDIT: Vyřešeno, stačilo přepsat 64bit knihovnu fbclient.dll za 32bitový
Editoval Zuben45 (2. 11. 2015 12:21)