web-dev-qa-db-fra.com

Comment récupérer une ligne avec PDO

J'essaie de ne pas être frustré, mais j'ai récemment appris que mysql_* est déprécié en PHP. J'ai décidé d'apprendre à utiliser PDO. Je viens de la regarder cet après-midi et la connexion à la base de données à l'aide de cette fonction était facile, mais je voulais ensuite aller chercher une ligne avec elle et la sauvegarder sous forme de tableau indexé par les noms de colonne mysql_fetch_array fait). Je ne peux pas le comprendre pour me sauver la vie. Je posterai mon code pour clarifier, et je suis sûr que c'est quelque chose de simple (toutes les erreurs de programmation sont toujours simples), mais je fais vraiment quelque chose de mal. 

//CONNECT TO DATABASE
$Host   = $_PARAM["DatabaseServer"];
$db     = $_PARAM["MainDatabase"];
$dbuser = $_PARAM["DatabaseUser"];
$dbpass = $_PARAM["DatabasePass"];
try
{
    $Database = new PDO("mysql:Host=$Host;dbname=$db", $dbuser, $dbpass);
}
catch (PDOException $e)
{
    echo "There was an unexpected error. Please try again, or contact us with concerns";
}

$stmt = $Database->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($sUserCook));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo $row["username"];

Merci pour l'aide.

Alex

8
Alex

fetchAll fait ce qu'il dit: il récupère tous les résultats d'une requête. Comme il récupère beaucoup de résultats, vous obtenez un tableau indexé.

fetch fait ce que vous cherchez peut-être si vous ne voulez qu'une ligne: elle extrait un résultat pour une requête. Si vous convertissez le code mysql_* en PDO, le moyen le plus rapide consiste simplement à utiliser cette méthode à la place de mysql_fetch_assoc.

Si vous continuez à utiliser fetchAll: votre code ressemblera probablement à ceci:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    echo $row['username'];
}

Comme je l'ai dit, si vous ne convertissez que du code hérité en code PDO, il serait peut-être plus simple de modifier toutes les requêtes en instructions préparées et de remplacer ce qui suit:

  • mysql_fetch_assoc($result)
    -> $stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    -> $stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    -> foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}
20
Tom van der Woerdt

Utilisation

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

Vous obtiendrez le premier résultat de la requête.

0
Kit