Avatar billede starf Nybegynder
04. april 2013 - 22:03 Der er 16 kommentarer og
1 løsning

php og mysqli select from * where id =

Er der nogle der har en let forstålig guide til at lave sådan en mysqli her? Jeg kan simpelthen ikke få det til at virke.

Jeg har brug for at lave en select from table where id = $id
id er en string fra en get. der efter skal det resultat skrives til en værdi

$test = $row['data'];

nogle der kan skyde mig i den rigtige retning.
Avatar billede starf Nybegynder
04. april 2013 - 22:12 #1
f.eks.
/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('SELECT * FROM `fil` WHERE `token` > ?')) {

    /* Bind parametre */
    $stmt->bind_param('s', $id);

    /* Sæt værdier på parametrene */
    $id = $_GET['id'];

    /* Eksekver forespørgslen */
    $stmt->execute();

    /* Bind resultatet */
    $stmt->bind_result($token);

    /* Hent rækker og udskriv data */
    while ($stmt->fetch()) {
        echo $token . ' ' . '<br>';
    }

    /* Luk statement */
    $stmt->close();

} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
}

giver mig denne fejl på linie 24:
Number of bind variables doesn't match number of fields in prepared statement in

linie 24 er:

  $stmt->bind_result($token);

såvidt jeg kan se er der kun en der, da det kun er en værdi jeg vil hente ud a den row jeg har der hedder token.
Avatar billede arne_v Ekspert
04. april 2013 - 22:24 #2
SELECT etenkeltfeltnavn FROM ...

maaske
Avatar billede starf Nybegynder
04. april 2013 - 22:29 #3
hvis jeg gør det, dunker den alt indholdet ud fra alle token rows, i et køre.. jeg vil kun have den engang?

og den gør det selv om mit id ikke burde ramme noget f.eks. hvis jeg bare skriver id=1 så dumper den stadig det hele, er ikke som om den select token from fil where id = værdi
Avatar billede starf Nybegynder
04. april 2013 - 22:31 #4
for satan jeg er træt... der var en > og ikke en =...
Avatar billede starf Nybegynder
04. april 2013 - 22:33 #5
hvordan vil man skrive en besked hvis idét ikke blev fundet?
Avatar billede arne_v Ekspert
04. april 2013 - 22:39 #6
fordi du erstatter stjernen med et feltnavn kommer der vel ikke flere raekker ud????
Avatar billede arne_v Ekspert
04. april 2013 - 22:40 #7
ah - ja = er nok en god ting
Avatar billede arne_v Ekspert
04. april 2013 - 22:41 #8
en maade:

$tom = true;
while ($stmt->fetch()) {
        echo $token . ' ' . '<br>';
        $tom = false;
}
if($tom) {
  echo 'tomt';
}
Avatar billede starf Nybegynder
04. april 2013 - 22:44 #9
tak for hjælpen :) så kom der hul på bylden.. Smid endelig et svar :)
Avatar billede arne_v Ekspert
04. april 2013 - 22:49 #10
svar
Avatar billede olebole Juniormester
05. april 2013 - 20:02 #11
<ole>

Hvis der kun skal hentes den ene række, hvor id-feltet har en specifik værdi, er der ikke grund til en løkke - og så kunne man i øvrigt bruge STATEMENT->num_rows:

/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('SELECT feltnavn FROM `fil` WHERE `token` = ?')) {

    /* Bind parametre */
    $stmt->bind_param('s', $id);

    /* Sæt værdier på parametrene */
    $id = $_GET['id'];

    /* Eksekver forespørgslen */
    $stmt->execute();
   
    $stmt->store_result();
   
    if ($stmt->num_rows > 0) {
        $stmt->bind_result($token);
        $stmt->fetch();
        echo $token;
    } else {
        echo 'tomt';
    }

    /* Luk statement */
    $stmt->close();
} else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
}

/mvh
</bole>
Avatar billede starf Nybegynder
05. april 2013 - 20:17 #12
smart tak for dit svar, det er nok en noget bedre måde at gøre det på.
Avatar billede olebole Juniormester
05. april 2013 - 20:41 #13
Selvtak. Lidt mere logisk i forhold til opgaven, men f.eks. perfomance-mæssigt tror jeg ikke, der er mange halve picosekunders forskel  =)
Avatar billede starf Nybegynder
05. april 2013 - 22:31 #14
det er der nok ikke til dette her, men omvendt det er langt mere overskueligt :)
Avatar billede olebole Juniormester
05. april 2013 - 23:00 #15
Du skal blot bemærke, at der skal eksistere et resultset i hukommelsen, før du kan bruge num_rows. Når du bruger et prepared statement, er du derfor nødt til at kalde store_result først.

Bruger du derimod query-metoden, ligger num_rows som property direkte på resultatet:

$result = $mysqli->query(...);
if ($result->num_rows > 0) {
    // Mindst én række fundet
}


Dokumentationen om num_rows på resultatet
Avatar billede olebole Juniormester
05. april 2013 - 23:05 #16
PS: query-metoden bruger du, når du ikke har brug for variabler i SQL-sætningen ... f.eks:

$sql = 'SELECT id, navn FROM brugere';
$result = $mysqli->query($sql);
Avatar billede starf Nybegynder
06. april 2013 - 00:34 #17
tak for dine guldkorn, de er en stor hjælp.
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
Kurser inden for grundlæggende programmering

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