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