J'ai commencé à utiliser PDO récemment, plus tôt j'utilisais juste mysql. Maintenant, j'essaie d'obtenir toutes les données de la base de données.
$getUsers = $DBH->prepare("SELECT * FROM users ORDER BY id ASC"); $getUsers->fetchAll(); if(count($getUsers) > 0){ while($user = $getUsers->fetch()){ echo $user['username']."<br/>"; } }else{ error('No users.'); }
3 Réponses :
Le update strong> (manquant PDO code> méthode
fetchall () Code>
renvoie un tableau / un ensemble de résultats, que vous devez attribuer à une variable, puis utiliser / itérer via cette variable: exécuté () code>)
En outre, il semble que vous n'appeliez pas le exécuter () code> méthode qui doit se produire après em> vous préparerez la déclaration mais avant em> vous récupérez les données: p>
$getUsers = $DBH->prepare("SELECT * FROM users ORDER BY id ASC");
$getUsers->execute();
$users = $getUsers->fetchAll();
...
@ user1791971 Si vous faites var_dump ($ utilisateurs); code>, après le
fetchall () code>, qu'est-ce qu'il affiche?
Avez-vous une erreur de contrôle et d'affichage des erreurs: ajoutez error_rporting (e_all); INI_SET ('"DISPLAY_ERRORS', '1'); code> au sommet du script
@ user1791971 ah, j'ai relu votre message; Vous manquez également un appel à exécuté () code>. J'ai mis à jour ma réponse avec les informations pertinentes.
Ce code ci-dessous fera ce que vous demandez:
$sql = $dbh->prepare("SELECT * FROM users ORDER BY id ASC"); $sql->execute(); while ($result = $sql->fetch(PDO::FETCH_ASSOC)) { echo $result['username']."<br/>"; }
Votre code manque un appel à Toutefois, dans votre exemple, vous ne transmettez aucune donnée variable à la requête et que vous ne l'exécutez qu'une seule fois, ce qui défait un but d'une déclaration préparée . Vous devez utiliser des instructions préparées si vous devez avoir des variables dans votre SQL, par exemple: p> s'il n'y a pas de variables, vous pouvez simplement utiliser exécuté () code>
après Préparer () Code> a >. Une fois que votre déclaration préparée est exécutée, vous pouvez obtenir la gamme d'enregistrements à l'aide de
fetchall () code>
. Query () code>
méthode. P> $getUsers = $DBH->prepare('SELECT * FROM users WHERE username LIKE ? ORDER BY id ASC');
$getUsers->execute([
'%' . $_GET['search'] . '%' // search for username with wildcards
]);
foreach ($getUsers as $user) {
echo $user['username']."<br/>";
}
Je ne pense pas qu'aucun utilisateur n'indique que l'erreur fatale.
Je pense que fetchall () code> ne doit être utilisé que si vous incorporiez l'un des systèmes intelligents / magiques Extraîner des modes ou si le traitement de l'ensemble de résultats est en cours de réalisation dans une autre couche de l'application. En d'autres termes, si vous allez immédiatement itérer le résultat défini comme un jeu de résultats structuré "standard", n'utilisez pas
fetchall () code>.
@mickmackusa je suis en désaccord. Je comprends votre point, et je le fais dans mon propre code, mais je crois que dans mes réponses, je devrais s'efforcer de montrer la séparation de la logique d'application et de présentation. Les données doivent être récupérées dans les structures PHP et l'instruction PDO ne doit pas être exposée à la logique de présentation. Peut-être que je n'ai pas précisé cette distinction dans cette réponse en raison de la brièveté, mais c'était mon objectif. La boucle foreach code> est utilisée pour afficher les données et ne pas traiter les résultatsset.
Si vous allez gérer instantanément des lignes spécifiques, je ne recommande pas Fetchall (). Cela crée une pile uniquement pour le chercher un par un. J'aime mieux le dernier extrait.
Qu'est-ce que
erreur (...) code>? Assurez-vous que les déclarations d'erreur sont sur ....