2013-05-30 16 views
15

Sto cercando di creare un'applicazione web utilizzando PHP e sto usando memcached per archiviare i dati utente dal DB.Come leggere fetch (PDO :: FETCH_ASSOC);

Per esempio consente di dire che ho questo codice:

$sql = "SELECT * FROM users WHERE user_id = :user_id"; 
$stmt = $this->_db->prepare($sql); 
$result = $stmt->execute(array(":user_id" => $user_id)); 
$user = $stmt->fetch(PDO::FETCH_ASSOC); 

io non sono davvero sicuro di come leggere la variabile $user e ottenere i dati di fuori di esso. Dovrò essere in grado di leggere la colonna email e password.

Speravo che qualcuno potesse spiegarmi come funziona.

Grazie

+8

Usa 'print_r ($ user);' per visualizzare il contenuto restituiti – Martin

+1

si restituisce un array, quindi significa che ho appena letto un $ user [ 'password']? – PHPDEV

+1

@PHPDEV: Sì. Esattamente :) –

risposta

30

PDOStatement::fetch restituisce una riga dal set di risultati. Il parametro PDO::FETCH_ASSOC indica a PDO di restituire il risultato come array associativo.

Le chiavi dell'array corrisponderanno ai nomi delle colonne. Se la tabella contiene le colonne 'e-mail' e 'password', l'array verrà strutturato come:

Array 
(
    [email] => '[email protected]' 
    [password] => 'yourpassword' 
) 

Per leggere i dati dalla colonna 'e-mail', fare:

$user['email']; 

e 'password ':

$user['password']; 
+1

Come posso ottenere il conteggio delle righe dai dati restituiti? – PHPDEV

+1

[PDOStatement :: rowcount] (http://www.php.net/manual/pdostatement.rowcount.php) –

+0

@PHPDEV in realtà non è necessario un conteggio delle righe –

1

Per leggere il risultato si può leggere come un semplice array php.

Ad esempio, ottenere name può essere eseguito come $user['name'] e così via. Il metodo fetch(PDO::FETCH_ASSOC) restituirà solo 1 tupla tho. Se si desidera ottenere tutte le tuple, è possibile utilizzare fetchall(PDO::FETCH_ASSOC). Puoi passare attraverso l'array multidimensionale e ottenere i valori allo stesso modo.

+0

Non è "come un array", è * è * un array. Post scriptum 'tuple' non è un termine PHP :) –

1

PDO:FETCH_ASSOC mette il risultato in un array in cui i valori sono mappati i loro nomi di campo.

È possibile accedere al campo name in questo modo: $user['name'].

Si consiglia di utilizzare PDO::FETCH_OBJ. Si recupera campi in un oggetto e si può accedere in questo modo: $user->name

9

Loop attraverso l'array come qualsiasi altro Array associativo:

while($data = $datas->fetch(PDO::FETCH_ASSOC)){ 
    print $data['title'].'<br>'; 
} 

o

$resultset = $datas->fetchALL(PDO::FETCH_ASSOC); 

echo '<pre>'.$resultset.'</pre>'; 
1

Metodo

$user = $stmt->fetch(PDO::FETCH_ASSOC); 

restituisce un dizionario .È possibile ottenere semplicemente email e password:

$email = $user['email']; 
$password = $user['password']; 

Altro metodo

$users = $stmt->fetchall(PDO::FETCH_ASSOC); 

restituisce un lista di un dizionario

+0

Come funziona questa risposta migliore di una 4 anni a questa domanda? – iehrlich

+0

Invece della parola "array", è preferibile utilizzare le parole "elenco" e "dizionario". – Kit

+0

"Array associativo" è la parola corretta per un "dizionario" :) – iehrlich

0

/* Design Pattern "porta table-dati" */

class Gateway 
{ 
    protected $connection = null; 

    public function __construct() 
    { 
     $this->connection = new PDO("mysql:host=localhost; dbname=db_users", 'root', ''); 
    } 

    public function loadAll() 
    { 
     $sql = 'SELECT * FROM users'; 
     $rows = $this->connection->query($sql); 

     return $rows; 
    } 

    public function loadById($id) 
    { 
     $sql = 'SELECT * FROM users WHERE user_id = ' . (int) $id; 
     $result = $this->connection->query($sql); 

     return $result->fetch(PDO::FETCH_ASSOC); 
     // http://php.net/manual/en/pdostatement.fetch.php //     
    } 
} 

/* Stampa tutto fila con colonna 'user_id' solo */

$gateway = new Gateway(); 
$users = $gateway->loadAll(); 

$no = 1; 
foreach ($users as $key => $value) { 
    echo $no . '. ' . $key . ' => ' . $value['user_id'] . '<br />'; 
    $no++; 
} 

/* Stampa user_id = 1 con tutte le colonne */

$user = $gateway->loadById(1); 

$no = 1; 
foreach ($user as $key => $value) { 
    echo $no . '. ' . $key . ' => ' . $value . '<br />'; 
    $no++; 
} 

/* Stampa user_id = 1 con la colonna 'e-mail e password' */

$user = $gateway->loadById(1); 

echo $user['email']; 
echo $user['password']; 
Problemi correlati