web-dev-qa-db-fra.com

Comment lire la recherche (PDO :: FETCH_ASSOC);

J'essaie de créer une application Web avec PHP et d'utiliser memcached pour stocker les données utilisateur à partir de la base de données.

Par exemple, disons que j'ai ce code:

 $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);

Je ne sais pas trop comment lire la variable $user et en extraire les données. Je devrai être capable de lire la colonne email et mot de passe.

J'espérais que quelqu'un pourrait m'expliquer comment cela fonctionne.

Merci

16
PHPDEV

PDOStatement :: fetch retourne une ligne du jeu de résultats. Le paramètre PDO::FETCH_ASSOC indique à PDO de renvoyer le résultat sous forme de tableau associatif.

Les clés du tableau correspondront à vos noms de colonnes. Si votre table contient les colonnes 'email' et 'password', le tableau sera structuré comme suit:

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

Pour lire les données de la colonne 'email', faites:

$user['email'];

et pour 'mot de passe':

$user['password'];
36
George Cummins

Parcourez le tableau comme n'importe quel autre tableau associatif:

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

ou

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

echo '<pre>'.$resultset.'</pre>';
13
TR3B

Méthode

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

retourne un dictionary . Vous pouvez simplement obtenir un email et un mot de passe:

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

Autre méthode

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

retourne une liste d'un dictionnaire

3
Kit

PDO:FETCH_ASSOC place les résultats dans un tableau où les valeurs sont associées à leurs noms de champs.

Vous pouvez accéder au champ name comme ceci: $user['name'].

Je recommande d'utiliser PDO::FETCH_OBJ. Il récupère les champs dans un objet et vous pouvez y accéder comme ceci: $user->name

2

Pour lire le résultat, vous pouvez le lire comme un simple tableau php.

Par exemple, obtenir name peut être fait comme $user['name'] et ainsi de suite. La méthode fetch(PDO::FETCH_ASSOC) ne renverra qu'un Tuple. Si vous voulez obtenir tous les n-uplets, vous pouvez utiliser fetchall(PDO::FETCH_ASSOC). Vous pouvez parcourir le tableau multidimensionnel et obtenir les valeurs de la même manière.

1
Akatosh

/ * Modèle de conception "passerelle de données de table" * /

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 //                   
    }
}

/ * Affiche toutes les lignes avec la colonne 'user_id' uniquement * /

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

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

/ * Print user_id = 1 avec toutes les colonnes * /

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

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

/ * Print user_id = 1 avec la colonne 'email et mot de passe' * /

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

echo $user['email'];
echo $user['password'];
0
antelove