při zavolání dibi : Maximum execution time of 30 seconds exceeded

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

Dobrý den, pokouším se do databáze uložit data získaná z jednoduchého formuláře, ale při zavolání dibi (odkliknutí formuláře) se mi stránka ‚freezne‘ a pak vyskočí debugger s chybovou hláškou.

v config.ini mám v [common]

; databaze
db.server = 127.0.0.1
db.database = inzeraty
db.username = root
db.password = 123456
db.driver = mysqli
db.charset = utf8
db.lazy = TRUE

v bootstrap.php

// databaze
dibi::connect(Environment::getConfig('db'));
// Step 5: Run the application!
$application->run();

v VlozInzeratPresenter.php

class VlozInzeratPresenter extends BasePresenter {

    public function createComponentInzeratForm($name){
        $form = new AppForm($this, $name);
        $form->addText('nadpis', 'Nadpis inzerátu:')
                ->addRule(AppForm::FILLED, 'Nadpis je povinný!');
        $form->addText('email', 'Váš e-mail:')
                ->setEmptyValue('@')
                ->addRule(AppForm::EMAIL, 'E-mail není validní.');
        $form->addTextarea('html', 'Obsah:')
                ->addRule(AppForm::FILLED, 'Zadejte obsah inzerátu.');
        $form->addSubmit('ok', 'Send');
        $form->onSubmit[] = callback($this, 'inzeratFormSubmitted');
        return $form;
    }

    public function inzeratFormSubmitted(AppForm $form){
        $data = $form->getValues();
        $data['datumVlozeni'] = new DateTime();
        //InzeratyModel::insert($data);
        dibi::query('select * from inzeraty');
        $this->flashMessage('Inzerát vložen!');
        $this->redirect("default");
    }
}

databáze inzeraty mi běží a tabulka
inzeraty má sloupečky
id
nadpis
html
email
datumVlozeni

používám php 5.3, Nette 2.0 a Dibi 1.5rc
pokuď si vypíšu phpinfo() tak mysqli běží.

nevíte někdo v čem může být chyba? děkuji.

Jan Tvrdík
Nette guru | 2595
+
0
-

muflix napsal(a):

při zavolání dibi (odkliknutí formuláře) se mi stránka ‚freezne‘ a pak vyskočí debugger s chybovou hláškou.

Tu chybovou hlášku nám tajíš úmyslně?

muflix
Člen | 92
+
0
-

ne vypíše to

Fatal Error
Maximum execution time of 30 seconds exceeded

viz nadpis příspěvku, omlouvám se měl jsem to napsat i do těla zprávy.

Jan Tvrdík
Nette guru | 2595
+
0
-

A když zakomentuješ volání dibi, tak to funguje?

muflix
Člen | 92
+
0
-

jj tak mě to přesměruje zpátky na formulář, který sem odeslal.

muflix
Člen | 92
+
0
-

Trochu jsem to ještě upravil a do config.ini jsem přidal

[common.database]

nad nastavení údajů k databázi.

a chybová hláška se mi změnila, vyskočí už hned po načtení index.php i v lazy módu db
a vypíše

InvalidArgumentException
Configuration must be array, string or object.

v kódu DibiConnection.php

79:            } elseif (!is_array($config)) {
80:                throw new InvalidArgumentException('Configuration must be array, string or object.');
81:            }

tak třeba to pomůže zjistit kde je problém, nevím?:(

Matúš Matula
Člen | 257
+
0
-

tu hlášku ti vyhodí zrejme kvôli tej zmene configu. To daj späť, ako si to mal. K tomu vypršaniu 30s limitu ma veľa nenapadá, ale skús ten sql dotaz upraviť na

<?php
dibi::query('select * from inzeraty limit 1');
?>

a potom uvidíme :)

muflix
Člen | 92
+
0
-

tak jsem to zkusil s tím limitem a nepomohlo to, zkusil jsem ještě načíst starší dibi knihovnu 1.2
a a teď to vyhazuje error

InvalidArgumentException
Configuration must be array, string or ArrayObject.

jako předtím bez ohledu jestli v config.ini je nebo neni [common.database]

zkusil jsem jiný návod
a config.ini jsem změnil na

[common.database] ;chyba se vyhodí i pokuď to zakomentuju
driver = mysql
host = localhost
database = inzeraty
username = root
password = 123456

a
bootstrap.php na

dibi::connect(Environment::getConfig('database'));

a žádná změna, takže ty zápisi připojení si jsou asi stejné.

--
teď jsem se zkusil k databázi připojit ručně v /testdb.php pomocí

mysql_connect('localhost', 'root', '123456') or die ('1');
mysql_select_db('inzeraty') or die ('2');
mysql_query('select * from inzeraty') or die ('3');

a zdá se, že se mnou databázový server nemluví, to se mi na localhostu ještě nestalo ?:|

Warning: mysql_connect() [function.mysql-connect]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:3306) in C:\web\www\test.dev\www\dbtest.php on line 13

Warning: mysql_connect() [function.mysql-connect]: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in C:\web\www\test.dev\www\dbtest.php on line 13

Fatal error: Maximum execution time of 30 seconds exceeded in C:\web\www\test.dev\www\dbtest.php on line 13

mysql běží jako služba na 127.0.0.1:3306, připojení sem zkontroloval přes mysql workbench a pokuď zadam do firefoxu http://127.0.0.1:3306 tak mi nabídne na stáhnutí soubor s obsahem cca

>
5.1.53-community,|NQ-,4`˙÷!ik`!|sL`~xa]˙„Got packets out of order

takže to něco dělá :o

Matúš Matula
Člen | 257
+
0
-

Nie, mal som na mysli, aby si to dal tak, ako mas v 1. prispevku, teda aby si to mal v tvare pola, ako ti ta vynimka hovori, cize

; databaze
db.server = 127.0.0.1
db.database = inzeraty
db.username = root
db.password = 123456
db.driver = mysqli
db.charset = utf8
db.lazy = TRUE

config potom bude OK. Zostava ti vyriesit mysql service, ak do toho prilis nevidis, tak ti odporucam reinstall. Najprv ale skus daco poguglit, isto daco najdes, mozes skusit povypinat firewall, ci ti ho nahodou neblokuje a pod. Viac ti s tymto nepomozem, lebo do toho ani ja nevidim :)

muflix
Člen | 92
+
0
-

jj dik to sem zkusil, to pole je ok v dibi 1.5rc, ale ve verzi 1.2 to vyhodí array chybu :-) tak sem to vrátil zpět na novou verzi.. a s tím mysql si teď hraju tak uvidim, ale to už neni v rámci nette :p

edit:
tak sem vygooglil, ze ta chyba souvisi s novou verzi php (5.3) a ze staci v %windir%\system32\drivers\etc\hosts odkomentovat 127.0.0.1 localhost aneb už to běží :-)

Editoval muflix (7. 2. 2011 2:06)