Oznámení
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)