Avatar billede Slettet bruger
25. februar 2012 - 16:22 Der er 7 kommentarer

Problem ved: $query->execute();

Hej.

Jeg har et problem med et stykke kode.

Jeg vil gerne udskrive dataene fra min "posts" - tabel i min mysql database, og bruger derfor følgende kode:

$query = $db->prepare("SELECT user_id, post_id, title, LEFT(post, 300) AS post FROM posts");
$query->execute();
$query->bind_result($user_id, $post_id, $title, $post);

Koden fungerer fint når jeg kun har user_id, post_id, title samt post med, men så snart jeg prøver at tilføje en af de andre rækker jeg har i min database som f.eks. category - så giver den følgende fejl:

Fatal error: Call to a member function execute() on a non-object in /home/virtual/iye.dk/public_html/index.php on line 13

Hvorfor virker min $query->execute(); kun når jeg 4 parametre med, men ikke når jeg har flere?

Tak
Avatar billede DeeDawg Nybegynder
25. februar 2012 - 17:47 #1
Dit problem ligger ikke i selve execute() funktionen i MySQLi, men i din query.

Det er nemlig lige præcis det, PHP fortæller os med den fejlmeddelelse. Den fortæller dig, at din variabel $query, ikke indeholder et objekt, hvilket betyder at din query har slået fejl. Derfor indeholder $query højst sandsynligt en boolean - false.

Du kan enten vise os den query, du benytter til at hente flere data, end de 4 felter du har vist os her. Eller også tilføje lidt til din kode

<?php
    if($query = $db->prepare("SELECT user_id, post_id, title, LEFT(post, 300) AS post FROM posts")){
        $query->execute();
        $query->bind_result($user_id, $post_id, $title, $post);
    } else {
        die("Query failed: ".$db->error);
    }
?>

Så kan du jo se, om du selv kan finde ud af fejlen, når du ser fejlmeddelelsen fra din database. ;)
Avatar billede olebole Juniormester
25. februar 2012 - 17:47 #2
<ole>

Vis mig lige de tre linjer med fem felter.

Har du i øvrigt set de to nyeste guides i boksen ude til højre på siden her?  *o)

/mvh
</bole>
Avatar billede olebole Juniormester
25. februar 2012 - 17:58 #3
- men husk for Guds - og mest din egen - skyld at slette din else, når du har fundet fejlen. Koden må aldrig komme på serveren med den  *o)
Avatar billede olebole Juniormester
25. februar 2012 - 18:03 #4
Ups ... og så bør der nok stå:

die("Query failed: ".$query->error);

- da $query jo er dit statement  *o)
Avatar billede Slettet bruger
26. februar 2012 - 01:44 #5
@ olebole

Her er min query.

include('includes/db_connect.php');
$query = $db->prepare("SELECT user_id, post_id, title, LEFT(post, 300) AS post, category FROM posts");
$query->execute();
$query->bind_result($user_id, $post_id, $title, $post, $category);
?>

Og når jeg udskriver dem i teksten bruger jeg følgende
<?php echo $title ?>
Avatar billede Slettet bruger
26. februar 2012 - 01:51 #6
Jeg har fundet svaret..

Jeg havde tabeller i min MySQL database der hed where og when - og dette vil den når jeg tænker mig om selvfølgelig ikke arbejde med.

Så jeg omdøbte dem til post_where og post_when, og nu virker det fint.


mvh Jacob
Avatar billede olebole Juniormester
26. februar 2012 - 16:57 #7
Man kan godt bruge reserverede navne - en anden klassiker blandt danskere er et felt, der hedder 'by':

$query = $db->prepare("SELECT navn, by, postnr FROM people");

- som også vil fejle ... 'ORDER BY'  *o)

Jeg bruger stort altid backticks i min SQL:

$query = $db->prepare("SELECT `navn`, `by`, `postnr` FROM `people`");

Så brokker databasen sig ikke over de 'ulovlige' navne. Man bør dog helst undgå reserverede ord  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester