Yritin ihan tavallisesti hakea rivejä tietokannasta, kun pukkasi tällaista virheilmoitusta:
Notice: Undefined variable: artice in .../helper.php on line 30 Fatal error: Call to a member function fetch() on a non-object in .../helper.php on line 30
Helper.php tiedosto
<?php class ContentHelper { /** * Palauttaa haetun artikkelin tiedot */ static function getArticle(&$lnk, $id, $permission) { $article = $lnk->prepare("SELECT * FROM ".DB_PREFIX."content WHERE access <= ? AND id = ?"); $article->execute(array($permission, $id)); return $artice->fetch(PDO::FETCH_ASSOC); } } ?>
Rivi 30: return $article->fetch(PDO::FETCH_ASSOC);
Mikähän tuossa menee väärin ja mistä se johtuu? Sanakirjasta löytyi undefined sanalle suomennokset määrittelemätön ja epämääräinen. Miten niin $article on määrittelemätön (tai epämääräinen)?
Halannet käyttää tuota article muuttujaa artice muuttujan sijaan.
Luehan nyt. Et ole määritellyt muuttujaa $artice. Fetch() taas failaa täsmälleen samasta syystä: muuttujaa $artice ei ole olemassa, joten se ei myöskään voi olla olio, jollaisen operaattori '->' vaatii.
Vaikka korjaisit muuttujan nimen, niin kyseinen fatal error voi silti tapahtua, koska epäilen ettei SQL-kyselysi ole toimiva, koska katenoit DB_PREFIX'n arvon merkkijonoon todennäköisesti väärin. Vinkki: lisää yksi välilyönti.
Nyt kyllä hävettää.. Pitäisiköhän käydä testauttamassa onko minulla lukihäiriö. Miten ihmeessä voi näin töpeksiä ja tulla vielä esittelemään sitä töppäystä täällä. Tutkin nuo $article:t läpi ties kuinka monta kertaa eikä tuo sattunut silmään. Edes virheviestistä en huomannut tuota kirjoitusvirhettä. Miten voikin olla näin sokea kirjoitusvirheille. :(
The Alchemist kirjoitti:
Vinkki: lisää yksi välilyönti.
Kyllä tuo DB_PREFIX toimii hyvin kaikkialla muualla. Mihinhän tuo välilyönti pitäisi sijoittaa?
<?php $article = $lnk->prepare("SELECT * FROM ".DB_PREFIX."content WHERE access <= ? AND id = ?"); $article = $lnk->prepare("SELECT * FROM " . DB_PREFIX . "content WHERE access <= ? AND id = ?"); ?>
Molempien yllä olevien pitäisi toimia aivan samalla tavalla.
Niin no joo, en ajatellut taas tuota queryä. Mietin vaan, että 'contentia' ennen pitäisi olla väli. Maybe not.
Aihe on jo aika vanha, joten et voi enää vastata siihen.