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
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'];
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>';
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
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
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.
/ * 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'];