Comment réinitialiser le pointeur de tableau dans les résultats PDO pour plusieurs itérations ?

Linda Hamilton
Libérer: 2024-10-30 04:09:28
original
590 Les gens l'ont consulté

How to Reset the Array Pointer in PDO Results for Multiple Iterations?

PDO Réinitialisation du pointeur de tableau dans les résultats

Lors de la transition de MySQL aux méthodes PDO, on peut rencontrer des défis en essayant de parcourir un fichier récupéré tableau deux fois, en commençant à chaque fois à partir de la ligne zéro. La solution réside dans la compréhension des différences d'approche entre les deux méthodes.

Dans le framework MySQL, la fonction mysql_data_seek rembobine le pointeur de ligne vers une position spécifique dans le tableau résultant. Cependant, dans PDO, cette fonctionnalité n’est pas directement disponible. Au lieu de cela, on peut utiliser deux techniques alternatives pour obtenir le résultat souhaité.

Enregistrement des résultats dans un tableau

La première approche consiste à stocker les résultats dans un tableau, comme démontré dans l'extrait de code ci-dessous :

$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC');
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();

$rows = $stmt->fetchAll();

foreach ($rows as $r) {
    // first run
}

foreach ($rows as $r) {
    // second run
}
Copier après la connexion

En utilisant la méthode fetchAll, l'ensemble des résultats est stocké dans le tableau $rows, permettant plusieurs itérations avec le pointeur de réinitialisation.

Réexécution de la requête

Alternativement, on peut choisir de réexécuter la requête. Bien que moins efficace que la méthode de stockage sur tableau, cette approche peut suffire lorsque l'ensemble de résultats est relativement petit.

$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC');
$stmt->setFetchMode(PDO::FETCH_ASSOC);

while($row = $stmt->fetch())
{
    // first run
}

$stmt->execute(); //re-execute the query

while($row = $stmt->fetch())
{
    // second run
}
Copier après la connexion

En réexécutant la requête, un nouvel ensemble de résultats est généré, avec le pointeur commençant à la ligne zéro. Cette approche garantit que les deux itérations ont accès à l'ensemble des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!