Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

A znovu další potíž. Tentokrát je to ale zřejmě způsobeno kvůli souboru Db.php, který je stažen odsud z itnetwork. Když dělám na stránce výpis z databáze podle požadovaných kategorií, prohlížeč mi vyhodí error: Fatal error: Call to a member function execute() on a non-object in /home/users/mik­kuba/mainos.ce­kuj.net/web/Db­.php on line 40

Zde je kus kódu z Db.php kolem řádku 40:

private static function executeStatement($params)
        {
                $query = array_shift($params);
                $statement = self::$connection->prepare($query);
                $statement->execute($params);
                return $statement;
        }

Pokud v kódu stránky ale zablokuji jednu deklaraci proměnné, chyba nevyskočí, ale neprovede se žádný výpis:

<?php
session_start();
require('../../Db.php');
Db::connect('prihlasovaci udaje');

$inzeraty = Db::queryAll('
        SELECT *
        FROM inzeraty
        WHERE kategorie=automobily AND upresneni=nakladni automobily
        ORDER BY inzeraty_id  DESC

');
?>

Pokud tuhle část zakomentuji, tak vše funguje.

Ještě pro úplnost, na stránce mám zatím pouze a jen tabulku, která má takovýto kód:

<table id="vypis">
                                <?php
                                        foreach ($inzeraty as $inzerat)
                                        {
                                                echo('<tr><td><h2>

                                                                ' . htmlspecialchars($inzerat['titulek']) . '</a>
                                                        </h2>' . htmlspecialchars($inzerat['text']));
                                                echo('</td></tr>');
                                        }
                                ?>
                        </table>

Nevidí v tom někdo zkušený na první pohled chybu?

Omlouvám se za další SPAM, ale zdejší komunita se mi osvědčila, že sem chodí slušní lidé, kteří jsou ochotni pomoci. Proto se zde znovu obracím.

PS: našel jsem i nějaké podobná témata na stackoverflow.com, ale tam mi to nepřijde příliš užitečné..

 
Odpovědět 19.1.2015 22:42
Avatar
d4rkw34v3r
Člen
Avatar
d4rkw34v3r:

Zkontroluj, co si vraci to self::$connection->prepare($query);. Predpokladam, ze to pouziva PDO a pokud se nepodari pripravit prepared statements, tak to vrati FALSE, nad kterym nemuzes zavolat Execute.

Problem asi bude v tom dotazu, nechybej ti tam uvozovky v sekci WHERE?

Editováno 19.1.2015 22:58
 
Nahoru Odpovědět  +1 19.1.2015 22:55
Avatar
BlugW
Redaktor
Avatar
Odpovídá na Michal Kuba
BlugW:

Na první pohled bych řekl že v tom WHERE vadí ta mezera u "nakladni automobily" jelikož není v uvozovkách nic...

co třeba to přidat do proměnných a ty vložit do příkazu?
Kod by mohl vypadat takto. Je docela pozdě tak jsem se mohl i někde seknout :D

$kategorie = "automobily";
$upresneni = "nakladni automobily";

 $inzeraty = Db::queryAll('
         SELECT *
         FROM inzeraty
         WHERE kategorie=? AND upresneni=?
         ORDER BY inzeraty_id  DESC

 ', $kategorie, $upresneni);

...
Editováno 19.1.2015 23:04
Nahoru Odpovědět  +1 19.1.2015 23:03
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Michal Kuba
Marek Z.:

Souhlasím s d4rkw34v3r, zkus:

WHERE kategorie="automobily" AND upresneni="nakladni automobily"

Ale lépe je to navazovat mimo dotaz samotný tedy:

WHERE kategorie=? AND upresneni=?

bindValue(1, 'automobily');
bindValue(2, 'nakladni automobily');

Pokud u toho nebude uživatelský vstup tak to, ale nemusíš hrotit. já jenom aby jsi věděl popřípadě do budoucna.. ;)

Nahoru Odpovědět  +1 19.1.2015 23:03
Chybami se člověk učí, běžte se učit jinam!
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Marek Z.
Michal Kuba:

Ani po přidání uvozovek to nejde - stále to háže stejný error...

 
Nahoru Odpovědět 20.1.2015 9:38
Avatar
Marek Z.
Redaktor
Avatar
Odpovídá na Michal Kuba
Marek Z.:

Tak použij radu BlugW, to by mělo problém vyřešit.

Nahoru Odpovědět 20.1.2015 10:53
Chybami se člověk učí, běžte se učit jinam!
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Marek Z.
Michal Kuba:

Vyzkouším u pc. Ještě je možné, že mám chybu v php bloku v těle stránky.

 
Nahoru Odpovědět 20.1.2015 11:18
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Kuba
David Čápka:

Máš chybu v tom dotazu, nepodaří se ho ani přeložit.

Nahoru Odpovědět  +1 20.1.2015 13:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na David Čápka
Michal Kuba:

A v čem? Co to nedokáže přeložit? :/

 
Nahoru Odpovědět 20.1.2015 13:10
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Marek Z.
Michal Kuba:

pořád mi to nefunguje, ani podle BlugW , přitom si myslím, že to je docela pochopitelně udělané a že by to mělo jít..

 
Nahoru Odpovědět 20.1.2015 13:19
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na David Čápka
Michal Kuba:

Nemůže to být něco s tím ORDER BY? Protože když odstraním tuhle část, tak to již vypíše správně to, co má..

 
Nahoru Odpovědět 20.1.2015 13:22
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Kuba
David Čápka:

Já neznám tvůj datový model, si ten dotaz spusť v PhpMyAdmin.

Nahoru Odpovědět 20.1.2015 13:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.