DOP fetch / fetchAll

Non è nuova a PHP, ma solo un giorno di vita a DOP. Sicuramente sto facendo qualcosa di sbagliato qui.

    $query = $conn->prepare("SELECT * FROM admins WHERE username = :username AND password = :password");
    $query->execute(array('username' => $username,'password' => sha1($password)));
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
    if (count($result) > 0)
    {
        $_SESSION['user']['who']        = $result[0]['who'];
        $_SESSION['user']['email']  = $result[0]['email'];
        $_SESSION['user']['username']   = $result[0]['username'];
        echo REFRESH;
    }
    else
    {
        $message = "Invalid username /password.";  
    }

l’unico modo che posso dichiarare $_SESSIONS correttamente è che se io uso $result[0]['fieldName']; Come posso accedere tramite $result['fieldName']; ?

InformationsquelleAutor Ronnie | 2012-12-28

 

2 Replies
  1. 9

    fetchAll, come la documentazione dice, recupera un array di recuperare tutti i dati contemporaneamente. Dal momento che si sta utilizzando FETCH_ASSOC, un array di array associativi viene recuperata. Se si sa per certo che solo una colonna viene restituito o sono solo interessati nella prima colonna restituito, basta usare fetch. Altrimenti devi iterare la fetchAll risultati o fare quello che hai fatto.

    • Bene, allora che cosa sarebbe la corretto test del caso per non restituire nulla, se io uso solo fetch? Il primo pensiero sarebbe (!empty($result)) ? //log in : //invalid
    • fetch restituirà un falsy valore se non ci sono righe. Si potrebbe anche controllare rowCount. Sia if ($query->rowCount) o if (!$row = $result->fetch()) farà.
    • ottimo…grazie! Fetch opere
  2. -1

    uso:

    foreach( $result as $row )  
    {  
        $_SESSION['user']['who']  = $row['who'];
        .... and so on
    }
    • Sembra sciocco usare foreach quando si sovrascrive la stessa variabile ogni volta, e quando si sa che c’è solo un elemento della matrice per iniziare con.
    • Vero, andare con @esplosione pillole di approccio.

Lascia un commento