Nejste přihlášen(a)
Zdravím,
nedávno jsem začal dělat s dibi a když chci použít příkaz dibi::update
tak mi to vyhodí chybovou hlášku : Cannot redeclare class DibiPcreException
in …\www\admin\dibi\dibi.php on line 61. Přitom já jsem se v dibi
souborech nehrabal a zkoušel jsem ho asi 3× znova stáhnout a chyba stále
vyskakuje. Přitom kodu myslím že chybu nemám, takže opravdu nechápu pro to
nejde. Jsem začátečník takže na mě prosím berte ohledy :).
Díky Taubda
dibi::update("text",array(
"name" => $_POST["name"],
"author" => $_POST["author"],
"text" => $_POST["text"],
))->where("id = %i", $id)->execute();
Stáhl jsem novou verzi a nyní to vyhazuje chybku :
class DibiVariable in …\www\admin\dibi\dibi.php on line 65
Opravdu nevím co stím páč v tom souboru dibi.php na řádku 65 nic není. Děkuji za všechny rady.
Divné. Nepoužíváš nějaký akcelerátor? Nebo vlastní class loader?
promin, ale nevím co je to akcelerátor. Opravdu jsem jen začátečník. Tip bych si že je to obecný název pro programy typu EasyPHP které používám (verze 5.3.6) takže nevím zda to může být tím páč na webu jsem to nezkoušel. V dibi jsem nic neupravoval. Taubda
Ta chyba je, že za poslední položkou pole s sloupci a jejich novými hodnotami je čárka. Takže dibi čeká další položku toho pole, ale ta už není.
Když se ta čárka za poslední položkou toho pole zruší, tak už by mělo být všechno OK.
Takže poté (po změně) bude celý příkaz takto:
dibi::update( "text",array(
"name" => $_POST["name"],
"author" => $_POST["author"],
"text" => $_POST["text"]
))->where("id = %i", $id)->execute();
Editoval Václav M. (20. 10. 2011 11:28)
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Václav M.
Čárka tam klidně může být, to je standard PHP syntax.
taubda
Zjednodušeně řečeno… při vykonávání PHP kódu se kód pokaždé
naparsuje, poté se převede do bytekódu a tento bytekód je spuštěn.
Parsování a převod do bytekódu má určitou procesorovou režii a aby se
ušetřila, existují pro PHP rozšíření, který bytekód udržují dokud se
PHP skript nezmění. Tím se sníží režie a stránky se načítají
rychleji.
EasyPHP neznám a nevím jak se konfiguruje. Ale najdi si php.ini soubor, volby extension=xxxxxxxx.dll a o každé povolené si něco vygoogli ať víš co dělá. Akcelerátory a debugery zakaž a pak restartuj webserver.
Milo napsal(a):
Václav M.
Čárka tam klidně může být, to je standard PHP syntax.
Ale stejně bych tu čárku za poslední položkou stejně raději odstranil.
Takže bych doporučil použití
dibi::test("UPDATE `text` SET %a", array(...) );
A to by odhalilo případnou chybu v SQL, pokud se tam nějaká vyskytuje.
Editoval Václav M. (20. 10. 2011 14:04)
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Václav M. napsal(a):
A PHP to také vadí.
.. čemu to vadí? Na žadný problém jsem s čarkou za posledním prvkem nikdy nenarazil…
Koukám, že jsem byl s tou opravou pomalý. Takže si někdo mohl přečíst …
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
V SQL chyba není, to by vyskočila DibiException. Vypadá to,
že se volá 2× require dibi.php, nebo dělá problém nějaký
akcelerátor (což už se mi také několikrát stalo).
taubda napsal(a):
dibi::update("text",array( "name" => $_POST["name"], "author" => $_POST["author"], "text" => $_POST["text"], ))->where("id = %i", $id)->execute();
syntaxe je naprosto v pořádku a zde chyba není. Chyba bude buď v pokusu o opakovanou inicializaci, možná nějaký hloupý loader načítá třídu znova… Nebo máš zaplé nějaké rozšíření, které to rozbíjí. Chyba je tedy na serveru, né v tomto kódu.
Ukaž tedy jak dibi inicializuješ a jaké máš loadery… atd
Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHub | CMS Kdyby
Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni
No, a co takhle použít
dibi::query("UPDATE `text` SET %a", array(...) )
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Děkuju všem za rady, ale zkusil jsem upravit nějaké ty extension= (díky Milo !) a už to krásně jede. Díky !
HosipLan napsal(a):
Proč? nic si tím nepomůžeš a je to jenom delší zápis…
Mě nepřipadá, že by ten můj zápis byl o tolik delší … ale budiž, protože každému vyhovuje něco jiného.
-->
A jen tak mimochodem, na stránce DIBI Quick Start je
tenhle text
dibi::query('UPDATE `table` SET ', array(
'time' => new DateTime,
));
// UPDATE `table` SET ('2008-01-01 01:08:10')
Jenže v textu použitého SQL dotazu je chyba – chybí totiž název sloupce, jehož obsah se mění – nebo ne?
Editoval Václav M. (21. 10. 2011 22:05)
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Je u toho napsáno:
Také si můžeme dovolit luxus žádný modifikátor před polem neuvést. V tom případě dibi použije tuto dedukci: jde-li o příkaz INSERT či REPLACE, zvol %v, jinak %a (platí pro asociativní pole).
Chyba není v tom PHP příkazu
dibi::query('UPDATE `table` SET ', array(
'time' => new DateTime,
));
ale v tom zapoznámkovaném SQL dotazu
// UPDATE `table` SET ('2008-01-01 01:08:10')
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Aha, už to vidím. Tohle spíš patří do vlákna Dokumentace…
To připouštím – že by to chtělo odstřihnout (posledních pár příspěvků) a přemístit do sekce Dokumentace …
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Mohu se teda zeptat jak to má správně být? Nějak jsem to nepochopil..
Co? Ten chybný dotaz z stránky Dibi Quick start? Ten by měl být přeci (datum a čas jsem, samozřejmě, ponechal z původního textu)
// UPDATE `table` SET `time`='2008-01-01 01:08:10'
Chybami se člověk učí – ale někteří lidé jsou nepoučitelní.
Jde o to, že ukázový kód je napsaný správně a SQL dotaz se vygeneruje správně. Je chyba pouze v komentáři pod kódem.