Jak se připojit k databázi Firebird?

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

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
+
0
-

Asi budeš muset použít třeba Dibi, Nette databáze možná nemá ten driver implementovaný.

Zuben45
Člen | 268
+
0
-

Aha, díky, no s dibi taky nemám moc zkušeností, dibi Nette má ?, myslím že asi ne, v knihovně jsem dibi nenašel.

romiix.org
Člen | 343
+
0
-

Dibi Firebird má.
Nette Database žiaľ nie. Môžeš vytvoriť :)

Zuben45
Člen | 268
+
0
-

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
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)