Avatar billede lakana Nybegynder
13. juli 2008 - 17:21 Der er 15 kommentarer og
1 løsning

Hjælp til MySQLi_STMT

Hvordan laver man følgende metode vha. MySQLi_STMT (http://dk.php.net/manual/en/class.mysqli-stmt.php)?


public function login($email, $password) {
    $sql = sprintf("SELECT `id`, `email` FROM `%s` WHERE `email` = '%s' AND `password` = '%s' LIMIT 1", self::TABLE_NAME, $email, $password);
    if($result = $this->mysqli->query($sql)) {
        return $result->num_rows == 1 ? $result->fetch_array(MYSQLI_ASSOC);
    } else {
        return false;
    }
}
Avatar billede coderdk Praktikant
13. juli 2008 - 19:44 #1
Helt utestet, men noget i stil med:

public function login($email, $password) {
    $sql = "SELECT `id`, `email` FROM `?` WHERE `email` = ? AND `password` = ? LIMIT 1";
    $stmt = $this->mysqli->prepare($sql);
    $stmt->bind_param( "sss", self::TABLE_NAME, $email, $password );
    if( $result = $stmt->execute() ) {
        return $result->num_rows == 1 ? $result->fetch_array(MYSQLI_ASSOC);
    } else {
        return false;
    }
}
Avatar billede coderdk Praktikant
13. juli 2008 - 19:45 #2
ellers skal

    if( $result = $stmt->execute() ) {
        return $result->num_rows == 1 ? $result->fetch_array(MYSQLI_ASSOC);
    } else {
        return false;
    }


ændres til


  $stmt->execute();
  if ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {
        return $row;
    } else {
        return false;
    }
Avatar billede coderdk Praktikant
13. juli 2008 - 19:45 #3
blah!

if ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {

skulle have været

if ( $row = $stmt->fetch_array(MYSQLI_ASSOC) ) {
Avatar billede coderdk Praktikant
13. juli 2008 - 19:50 #4
jeg er altså stiv... fetch_array findes da ikke... Du skal binde resultatet:

public function login($email, $password) {
    $sql = "SELECT `id`, `email` FROM `?` WHERE `email` = ? AND `password` = ? LIMIT 1";
    $stmt = $this->mysqli->prepare($sql);
    $stmt->bind_param( "sss", self::TABLE_NAME, $email, $password );
    $stmt->execute();
    $stmt->bind_result($id, $email);
    if ( $stmt->fetch() )
    {
        return array( "id" => $id, "email" => $email );
    } else {
        return false;
    }
}
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 20:20 #5
fetch_array og fetch_result findes nu fint på en mysqli_result dims. Og sådan een får man fra en mysqli_query. Det er en smule forkert at sige at "Du skal binde resultatet". Det er fx et eksempel:
  http://se2.php.net/manual/en/mysqli-result.fetch-assoc.php
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 20:20 #6
Ha, jeg mente nok:  "fetch_array og fetch_assoc ..... osv ....."
Avatar billede lakana Nybegynder
13. juli 2008 - 20:57 #7
Burde dette ikke virke?

$sql = "SELECT `id`, `title`, `text` FROM `content` WHERE `id` = ? LIMIT 1";
$stmt = $this->mysqli->prepare( $sql );
$stmt->bind_param( "i", $id );
if( $result = $stmt->execute() ) {
    return $result->num_rows == 1 ? $result->fetch_array( MYSQLI_ASSOC ) : false;
} else {
    return false;
}
Avatar billede coderdk Praktikant
13. juli 2008 - 21:36 #8
erikjakobsen, Men skal man ikke binde hvis man vil bruge mysqli_stmt?
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 21:37 #9
Jo, sikkert, men det er ikke den eneste måde, som du kan se. Det er bare det jeg anfægter.
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 21:38 #10
"Burde dette ikke virke?" ... måske - hvad sker der?
Avatar billede coderdk Praktikant
13. juli 2008 - 21:39 #11
lakana, Nej, $stmt->execute() returnerer kun true/false...
Avatar billede lakana Nybegynder
13. juli 2008 - 21:39 #12
"Notice: Trying to get property of non-object"

I denne linje:
return $result->num_rows == 1 ? $result->fetch_array( MYSQLI_ASSOC ) : false;
Avatar billede coderdk Praktikant
13. juli 2008 - 21:39 #13
erikjakobsen, hehe ok, men han spurgte om mysqli_stmt, og det var jo det jeg svarede på ;)
Avatar billede erikjacobsen Ekspert
13. juli 2008 - 21:41 #14
Ja, du skal lave en query for at få et "result". Se eksemplet.
Avatar billede lakana Nybegynder
07. august 2011 - 20:30 #15
skriv svar coderdk
Avatar billede coderdk Praktikant
07. august 2011 - 21:22 #16
Roger :)
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