Dans le développement de PHP, il est très courant d'utiliser l'extension MySQLI pour les opérations de base de données. La fonction MySQLI_RESULT :: Fetch_Column est une méthode simple pour extraire des données de colonne unique à partir des résultats de la requête, mais en usage réel, de nombreux développeurs rencontreront le problème de la duplication de données. Cet article analysera les causes des données en double en réponse à ce phénomène et fournira des solutions efficaces et un exemple de code pour aider tout le monde à éviter ce problème.
Conception incorrecte des déclarations de requête de base de données <br> Plusieurs fois, la cause profonde des données en double est la requête SQL elle-même, comme ne pas utiliser d'erreurs de condition de connexion distinctes , ou la question de la requête de l'association provoque la duplication des données.
Erreur de méthode d'extraction des données <br> Lorsque vous utilisez Fetch_Column , si les données sont traitées de manière déraisonnable dans la boucle, cela peut également conduire à une sortie répétée.
Cache de données ou défauts de logique en boucle <br> Si les données ne sont pas dédupliquées correctement après avoir été stockées dans le tableau, ou il y a un problème avec la logique de traversée de boucle, elle entraînera également une duplication.
Le moyen le plus direct et le plus efficace est de déduir les instructions SQL:
$sql = "SELECT DISTINCT column_name FROM table_name WHERE conditions";
$result = $mysqli->query($sql);
Cela garantit que chaque élément de données est unique dans l'ensemble de résultats retourné.
fetch_column extrait uniquement une colonne de données dans la ligne actuelle. Si vous appelez cela une boucle, vous pouvez obtenir la ligne de données par ligne, mais vous devez faire attention à:
Assurez-vous qu'aucun appel en double ne donne une sortie en double.
Évitez de ne pas libérer ou réutiliser correctement l'ensemble de résultats.
Si la couche de base de données ne peut pas garantir l'unicité, la couche PHP peut utiliser la déduplication du tableau:
$data = [];
while ($value = $result->fetch_column()) {
$data[] = $value;
}
$data = array_unique($data); // Supprimer les valeurs en double
Voici un exemple complet qui montre comment éviter les données en double:
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// utiliserDISTINCTÉvitez les données en double
$sql = "SELECT DISTINCT user_email FROM users WHERE status = 'active'";
$result = $mysqli->query($sql);
if ($result) {
$emails = [];
while ($email = $result->fetch_column()) {
$emails[] = $email;
}
// Assurez-vous de retirer à nouveau le poids(prévenirSQLLa déclaration ne fonctionne pas)
$emails = array_unique($emails);
foreach ($emails as $email) {
echo $email . "<br>";
}
$result->free();
} else {
echo "La requête a échoué: " . $mysqli->error;
}
$mysqli->close();
?>
Lors de la conception de SQL, utilisez distinct pour la déduplication est préférable.
Fetch_Column extrait les données de colonne unique par ligne et appelle raisonnablement.
Le côté PHP utilise Array_Unique comme méthode de déduplication secondaire.
Vérifiez la requête et la structure de données associées pour éviter les lignes en double involontaires.
Grâce aux techniques ci-dessus, le problème de données en double lors de l'utilisation de mysqli_result :: fetch_column peut être essentiellement éliminé, et la robustesse du code et la précision des données peuvent être améliorées.