<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie du code n'a rien à voir avec le contenu de l'article,Seulement par exemple en place d'espace</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue à lire cet article,Cet article discutera de la façon de l'utilisermysqli::use_resultÉvitement de la fonctionPHPProblème de débordement de mémoire。"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
* Comment passermysqli::use_resultLes fonctions sont effectivement évitéesPHPProblème de débordement de mémoire?
*
* existerPHPmilieu,utiliserMySQLLorsque la base de données,Il y a souvent des problèmes de débordement de mémoire lorsque l'ensemble de résultats de requête est important。特别是当utilisermysqliÉtendre l'exécution de la requête des grands ensembles de résultats,
* Si tous les résultats sont chargés en mémoire à la fois,Très facile à provoquerPHPMémoire épuisée,Crash du programme。
*
* mysqliFournit deux façons d'obtenir les résultats de la requête:store_result()etuse_result()。
*
* 1. store_result():
* Méthode par défaut,会将整个结果集一次性取回并缓存exister客户端内存milieu。
* Pour un grand volume de données,Très grande consommation de mémoire。
*
* 2. use_result():
* utiliser"Niveau de rangée"Comment obtenir,Ne récupérera pas tous les résultats à la fois,Au lieu de cela, lisez les données via le réseau。
* 这样可以显著降低内存utiliser,Évitez le débordement de la mémoire。
*
* 本文重点讲解如何合理utilisermysqli::use_result()避免Problème de débordement de mémoire。
*/</span>
<span class="hljs-comment">/**
* utilisermysqli::use_resultExemple de code pour
*/</span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Exécuter une requête</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">real_query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM large_table"</span></span><span>)) {
</span><span><span class="hljs-comment">// passeruse_resultObtenez l'ensemble de résultats,Évitez de charger de grandes quantités de données à la fois</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">use_result</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-comment">// Traiter les données ligne par ligne,Réduire l'utilisation de la mémoire</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-comment">// Traiter chaque rangée de données,Par exemple, sortir ou écrire dans un fichier</span></span><span>
</span><span><span class="hljs-comment">// echo $row['column_name'] . PHP_EOL;</span></span><span>
}
</span><span><span class="hljs-comment">// Ressourne des résultats de la version Ressources</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Échec de l'obtention des résultats:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La requête a échoué:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-comment">// Fermer la connexion</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
<span class="hljs-comment">/*
* Description détaillée:
*
* 1. Lecture de streaming:
* utiliseruse_result(),MySQLLe serveur n'enverra pas les résultats au client à la fois,Au lieu de cela, gardez la connexion,
* Faire lire le client en ligne。这样避免了大量数据exister内存milieu积累。
*
* 2. Choses à noter:
* - existerutiliseruse_result()heure,Tous les résultats ou appels doivent être lus en premierfree(),Ce n'est qu'alors que la nouvelle requête peut être exécutée。
* - Je ne peux pas être mélangéstore_result()etuse_result(),Évitez le blocage de connexion。
* - La connexion réseau doit être maintenue,读取过程不能milieu断。
*
* 3. Comparaison des performances:
* contrastestore_result(),use_result()Sacrifie une certaine performance(Nécessite plusieurs interactions réseau),
* 但显著减少了内存utiliser,Convient pour les grands scénarios de données。
*
* 4. Scénarios applicables:
* - Les résultats de la requête sont très importants,Impossible de charger tout de suite。
* - Besoin de traiter les résultats en morceaux,Si vous écrivez dans un fichier、Exportation de pagination, etc.。
*
* Résumer:
* utilisermysqli::use_result()Implémenter la requête en streaming,Oui, évitezPHPUne stratégie efficace pour le débordement de la mémoire。
* Il permet aux développeurs d'obtenir des données ligne par ligne,降低内存峰值utiliser,Cela améliore la stabilité du programme。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Étiquettes associées:
mysqli