tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Problém s includovaným připojením k databázi

před 8 lety

taubda
Člen | 7

Zdravím,
mám problém s připojením k databázi. Jsem teprve začátečník s DIBI, takže je možné že jsem udělal nějakou chybu v zápisu.Ted již k popisu problému – když mám připojení napsáno v souboru a pak ho pouze includuji. Pokud mám připojení normálně v souboru, jde všechno krásně, ale z jiného souboru ne.

require("dibi/dibi.php");   // V souboru
include "connect.php";


<?php
require("dibi/dibi.php");   //V souboru, connect.php
dibi::connect(array(
            'driver'   => 'mysql',
            'host'     => '127.0.0.1',
            'username' => 'root',
            'password' => '',
            'database' => ''
        ));

Na stránce mi to poté vyhazuje hlášku Fatal error: Cannot redeclare class DibiVariable in D:\PHP\EasyPHP\www\admin\dibi\dibi.php on line 65, což opravdu nechápu.
Děkuji všem za rady

Taubda

před 8 lety

Milo
Nette Core | 1119

Zkus namísto require použít require_once.

před 8 lety

taubda
Člen | 7

Píšu blblosti –

require("dibi/dibi.php");
include "connect.php";  //V souboru, connect.php

Takže je problém stím include, né s require.

před 8 lety

Milo
Nette Core | 1119

Tohle není problém dibi, ale Tvého postupu. 2× načítáš soubor dibi.php. Všude používej require_once("dibi/dibi.php");

před 8 lety

HosipLan
Moderator | 4693

PHP není Python ;)

před 7 lety

Václav M.
Člen | 34

Velmi se omlouvám za probuzení tohoto téma, ale mám potíže s připojením k databázi – jenže mi hlásí

Fatal error: in D:\WWW\CMS-VMaX-Kasandra2\dibi\drivers\mysql.php on line 167

Přičemž na uvedeném místě je tento kód:

if (mysql_errno($this->connection)) {
            throw new DibiDriverException(mysql_error($this->connection), mysql_errno($this->connection), $sql);

        } elseif (is_resource($res)) {
            return $this->createResultDriver($res);
        }

Což znamená, že je problém s připojením k databázi – ale když hodím var_dump na proměnnou, která nese údaje o spojení, tak výpis ukazuje, že připojení existuje. Tedy pokud správně chápu tohle:

object(DibiConnection)#1 (6) {
  ["onEvent"]=>
  NULL
  ["config":"DibiConnection":private]=>
  array(9) {
    ["driver"]=>
    string(5) "mysql"
    ["host"]=>
    string(9) "localhost"
    ["username"]=>
    string(4) "root"
    ["password"]=>
    string(0) ""
    ["database"]=>
    string(13) "CMS-Kasandra2"
    ["charset"]=>
    string(6) "Latin2"
    ["result"]=>
    array(2) {
      ["formatDate"]=>
      NULL
      ["formatDateTime"]=>
      NULL
    }
    ["name"]=>
    int(0)
    ["flags"]=>
    NULL
  }
  ["driver":"DibiConnection":private]=>
  object(DibiMySqlDriver)#2 (4) {
    ["connection":"DibiMySqlDriver":private]=>
    resource(55) of type (mysql link)
    ["resultSet":"DibiMySqlDriver":private]=>
    NULL
    ["autoFree":"DibiMySqlDriver":private]=>
    bool(true)
    ["buffered":"DibiMySqlDriver":private]=>
    bool(true)
  }
  ["translator":"DibiConnection":private]=>
  object(DibiTranslator)#3 (11) {
    ["connection":"DibiTranslator":private]=>
    *RECURSION*
    ["driver":"DibiTranslator":private]=>
    NULL
    ["cursor":"DibiTranslator":private]=>
    NULL
    ["args":"DibiTranslator":private]=>
    NULL
    ["hasError":"DibiTranslator":private]=>
    NULL
    ["comment":"DibiTranslator":private]=>
    NULL
    ["ifLevel":"DibiTranslator":private]=>
    NULL
    ["ifLevelStart":"DibiTranslator":private]=>
    NULL
    ["limit":"DibiTranslator":private]=>
    NULL
    ["offset":"DibiTranslator":private]=>
    NULL
    ["identifiers":"DibiTranslator":private]=>
    NULL
  }
  ["connected":"DibiConnection":private]=>
  bool(true)
  ["substitutes":"DibiConnection":private]=>
  object(DibiHashMap)#4 (1) {
    ["callback":"DibiHashMapBase":private]=>
    string(9) "

Celá sekvence požadovaných souborů je:

require_once ("../dibi/dibi.php");
require_once ("../VMaX-ZnaK/ZnaK.php");
require_once ("../VMaX-VHAT/VHAT.php");
require_once ("../ReqInc/Nastaveni.php");
require_once ("../Ovladace/DoplnkoveFunkce.php");
require_once ("../Ovladace/ZabezpecovaciFunkce.php");
require_once ("../Sablony/Hlaseni.php");
require_once ("Funkce.php");
require_once ("Texty.php");

...

include_once ("../ReqInc/MySql.php");
Instalace_VytvoreniTabulek_Spravce();

Chyba nastává ve chvíli, kdy má vytvořit tabulky do vybrané databáze. Jen dodávám, že původně (na jaře) vše běželo OK – pořadí požadování jednotlivých souborů bylo stejné. Že by na to mělo vliv umístění serveru na jiném fyzickém disku, o tom pochybuji. A jinak nastavení je shodné.

A upgrade na novější verzi DIBI na běh vliv nemá – protože tuhle chybu hlásil jak u staré verze, tak i u stávající verze. Takže vůbec netuším, kde může být chyba – protože z toho chybového hlášení jsem „jelen“.

Editoval Václav M. (19. 9. 2012 21:23)

před 7 lety

Milo
Nette Core | 1119

To není problém připojení k databázi ale chyba v dotazu. Pokud mohu doporučit, stáhni si Nette, naincluduj minifikovanou verzi a aktivuj laděnku. Ta ti řekne víc.

require "nette.min.php";
Nette\Diagnostics\Debugger::$strictMode = TRUE;
Nette\Diagnostics\Debugger::enable(FALSE);

// .. tvuj dalsi kod

před 7 lety

Václav M.
Člen | 34

Díky. Jen nechápu jeho procesní postup. Na příkaz CREATE TABLE IF NOT EXISTS Sekce_ZakladniInfo ... totiž hlásí, že ta tabulka neexistuje.

Příkaz je totiž proveden přes dibi::loadFile sql souboru, kde se střídají řádky s komentářem (jenž vždy začínají #) a řádky s vlastním příkazem.

Editoval Václav M. (20. 9. 2012 17:43)

před 7 lety

Milo
Nette Core | 1119

Vyřešeno, nebo ne? Jestli ne, do MySQL nevidím.

před 7 lety

Václav M.
Člen | 34

Zatím nevyřešeno. Zkusím zruěit tu formulku IF NOT EXISTS a uvidím.

Může to být i vlastním MySQL (resp. vlastním xampp). Což by i odpovídalo. Protože na jaře jsem měl jinou verzi.


Zrušení formulky IF NOT EXISTS nepomohlo. Takže chyba musí být v serveru. A tedy jej (zítra) přeinstaluji – na starší verzi.


Provedeno – a (zase) funguje. Ovšem zvláštní je, že u Kasandry 1, jenž dibi nepoužívá, proběhlo vytvoření tabulek v pořádku i s tou špatnou verzí xamppu (resp. MySQL).

Editoval Václav M. (24. 9. 2012 20:03)