Dibi is not connected to database
- marcelxy
- Člen | 70
Zdravím,
snažím se přejít z nette 2.4 na 3.0
app je postavena na dibi ale v nette 3.0 se nemůžu připojit k databázi a
nevím proč?
vše co potřebuje má?
DIC:
dibi.connection yes Dibi\Connection
dibi.panel yes Dibi\Bridges\Tracy\Panel
dibi =>
host => "127.0.0.1" (9)
username => "root" (4)
password => "tajneheslo" (5)
database => "mojedb" (6)
lazy => true
conf:
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
vyhazuje:
Dibi\Exception
Dibi is not connected to database
jak mužu zjistit proč se tam nemuže připojit? přihlašovací udaje mám
správné!
diky za radu?
Editoval marcelxy (5. 1. 2021 18:52)
- marcelxy
- Člen | 70
Prosim o radu?
prisel jsem na to ze dibi nama prihlasovaci udaje k db z local.neon
parameters:
dibi:
host: 127.0.0.1
username: root
password: ***
database: viewer
lazy: TRUE
toto je vipis z ladenky on ty udaje ma prazdne a nevim proc?
.../dibi/src/Dibi/Drivers/MySqliDriver.php:98 mysqli->real_connect()
88: $this->connection->options($key, $value);
89: }
90: }
91: @$this->connection->real_connect( // intentionally @
92: (empty($config['persistent']) ? '' : 'p:') . $config['host'],
93: $config['username'],
94: $config['password'] ?? '',
95: $config['database'] ?? '',
96: $config['port'] ?? 0,
97: $config['socket'],
98: $config['flags'] ?? 0
99: );
100:
101: if ($this->connection->connect_errno) {
102: throw new Dibi\DriverException($this->connection->connect_error, $this->connection->connect_errno);
$host
""
tady jsou argumenty ale prazdne! nevim proc?
$user null
$password "*****" (5)
$database ""
$port 0
$socket "/var/lib/mysql/mysql.sock" (25)
$flags 0
v common.neon mam
extensions:
dibi: Dibi\Bridges\Nette\DibiExtension22
a ten nacte jen mu chybi precist si prihlasovaci udaje z local.neon nacteny
ho ma
akorat nevim proc nepouzije z neho ty prohlasovaci udaje?
diky moc za rady
Editoval marcelxy (5. 1. 2021 18:55)
- David Matějka
- Moderator | 6445
a konfigurujes to dibi? ze sekce parameters se to automaticky nepreda, musis tam mit minimalne jeste neco jako
dibi: %dibi%
pripadne to v te sekci dibi nakonfigurovat primo
- IJVo
- Člen | 39
Myslím, že to máš špatně. Nemůže to být v sekci parameters.
Návod je zde: https://dibiphp.com/…ocumentation
-na konci je část „Připojení do Nette“.
Snad ti to pomůže.
- marcelxy
- Člen | 70
jeste bych potreboval radu,
uz se to zlepsilo pres
/** @var Dibi\Connection @inject */
public $database;
mi to spojeni preda ale pouze za pouziti „use Dibi“; bez toho ne!
ala ja potrebuji pouzivat jiny zapis
ne tento
$this->database->select('*')atd..
ale tento, je tak napsana cela app a nechce se mi to cele prepisovat
\dibi::select('*')atd..
a v tomto pripade porad hlasi ze nema spojeni z db.
jak mu mam predat tu sluzbu dibi abych mohl pouzivat jeho staticke metody ?
diky za rady.
- David Matějka
- Moderator | 6445
@PavelKravčík a hromadné předání závislostí? :)
nejsnažší bude nastavit to spojení z DI do statického dibi::setConnection
buď někde v indexu/bootstrapu nebo by to mělo jít i úpravou setup konfigurace toho dibi connection
- Pavel Kravčík
- Člen | 1196
@DavidMatějka Teoreticky by stačilo vložit nějakého předka alá BasePresenter, dle anotace předpokládám, že je celá logika v presenterech. Takže by stačilo dvě hromadné nahrazení. Jen jsem chtěl nabídnout alternativní řešení. ;)
- kralik
- Člen | 230
Ahoj,
rád bych se zeptal jak připojit přes Dibi dvě různé DB.
Mám dva moduly a každý by měl své připojení Dibi do ruzných
databází.
common.neon
serveces:
...
- App\Model\Firebird(@dibi.connection)
...
extensions:
..
dibi: Dibi\Bridges\Nette\DibiExtension22
dibi:
driver: firebird
port: 3055
database: server1/3055:C:\Data\data\data.FDB
username: 'uzivatel'
password: 'heslo'
lazy: TRUE
Toto mi funguje, ale jak připojit druhý model s jinou db přes Dibi
Myslel jsem něco takového
common.neon
serveces:
...
- App\Model\Firebird(@dibi.firebird.connection)
- App\Model\Mssql(@dibi.mssql.connection)
...
dibi:
firebird:
driver: firebird
port: 3055
database: server1/3055:C:\Data\data\data.FDB
username: 'uzivatel'
password: 'heslo'
lazy: TRUE
mssql:
dsn: 'sqlsrv:Server=srv1\SRV1;Database=DW'
user: 'uzivatel'
password: 'heslo'
Ale to dělám špatně, to mi nefunguje.
Prosím o radu jak na to.
Hledal jsem v dokumentaci, ale ni nenašel.
- David Matějka
- Moderator | 6445
@kralik priste radeji zaloz nove tema
dibi extension vice connection nepodporuje, ale nemel by byt problem registrovat extension vicekrat s tim, ze u druheho vypnes autowiring:
extensions:
dibiFirebird: Dibi\Bridges\Nette\DibiExtension22
dibiMssql: Dibi\Bridges\Nette\DibiExtension22
dibiFirebird:
...
dibiMssql:
...
autowired: false
services:
- App\Model\Firebird(@dibiFirebird.connection)
- marcelxy
- Člen | 70
aha diky za rady!
nakonec jsem to vyresil takhle do bootsrapu pred return
jsem dal toto a jedeto
$container = $configurator->createContainer();
$connection = dibi::connect($container->parameters['dibi']);
ale ted v tracy mam 2 DIC kontejnery coz je asi zase spatne?
no asi to bude jednoduchsi to prepsat v IDE na
$this->conection->select('*')...
ale ja to bral jako challenge vramci vyuky, myslel jsem ze to nejak jde
vyresit bez prepsani.
ale prepsat to bude asi ta spravna cesta?
- kralik
- Člen | 230
David Matějka napsal(a):
@kralik priste radeji zaloz nove tema
dibi extension vice connection nepodporuje, ale nemel by byt problem registrovat extension vicekrat s tim, ze u druheho vypnes autowiring:
extensions: dibiFirebird: Dibi\Bridges\Nette\DibiExtension22 dibiMssql: Dibi\Bridges\Nette\DibiExtension22 dibiFirebird: ... dibiMssql: ... autowired: false services: - App\Model\Firebird(@dibiFirebird.connection)
Super, funguje skvěle.
Díky moc