Les instructions préparées sont un outil puissant lors de l'utilisation de l'extension MySQLI de PHP pour les opérations de base de données. Il empêche non seulement efficacement l'injection de SQL, mais améliore également la maintenabilité et les performances du code. Lors du débogage et de l'optimisation de ces instructions de prétraitement, la fonction mysqli_stmt :: att_get fournit un moyen approfondi de comprendre l'état interne de l'instruction. Cet article expliquera son utilisation et ses applications pratiques en détail.
mysqli_stmt :: att_get est une méthode de la classe mysqli_stmt qui est utilisée pour obtenir des valeurs d'attribut liées à une poignée d'instruction. Ces valeurs d'attribut sont généralement utilisées pour ajuster ou afficher certains comportements sous-jacents effectués par une instruction, tels que les dénombrements tampon ou de mise à jour. Cette méthode est particulièrement utile lors du débogage des requêtes complexes ou de l'optimisation des goulets d'étranglement de performances.
int mysqli_stmt::attr_get ( int $attr )
$ att : Les constantes d'attribut qui doivent être interrogées, comme MySQLI_STMT_ATTR_UPDATE_MAX_LENGTH , etc.
Valeur de retour: renvoie la valeur de l'attribut lors du succès et renvoie false en cas d'échec.
Cette propriété est utilisée pour contrôler si Store_Result () met à jour la longueur maximale du champ. L'activation de cette propriété vous permet de connaître plus précisément la longueur de données maximale pour chaque colonne, ce qui est particulièrement utile pour la sortie de la sortie.
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT name FROM users");
$stmt->execute();
$stmt->store_result();
$maxLength = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($maxLength) {
echo "Propriétés activées:Longueur de colonne maximale mise à jour\n";
} else {
echo "Propriétés non activées:Longueur de colonne maximale non mise à jour\n";
}
De cette façon, on peut juger si les informations de longueur de colonne renvoyées par mysqli_stmt :: result_metadata () peuvent être invoquées.
Lorsque vous trouvez de mauvaises performances en utilisant bind_result () et fetch () dans une boucle, il peut être lié au mode tampon. Bien que ATTR_GET ne puisse pas dire directement si la mise en mémoire tampon est activée, vous pouvez utiliser Store_Result () et la valeur de retour de cette propriété pour déterminer si l'état de tampon est correctement géré, guidant ainsi si use_result () est autorisé à enregistrer la mémoire.
$stmt = $mysqli->prepare("SELECT large_column FROM big_table");
$stmt->execute();
$stmt->store_result();
if ($stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH)) {
echo "La longueur maximale de la colonne de mise à jour est activée,Peut augmenter l'utilisation de la mémoire。\n";
} else {
echo "La longueur de la colonne de mise à jour n'est pas activée,fetch Probablement plus rapide mais inexact。\n";
}
Activer Update_Max_Length uniquement si nécessaire : si vous traversez les données au lieu de vous fier aux informations de longueur maximale pour chaque colonne, vous n'avez pas besoin de permettre à cette propriété de réduire les frais généraux de performances inutiles.
Ajustez dynamiquement les attributs avec att_set : utilisez ATTR_SET pour définir la valeur d'attribut avant l'exécution, et vérifiez si la configuration prend effet via ATTR_GET après exécution.
$stmt->attr_set(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, true);
...
$val = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
Sélectionnez le mode tampon en fonction des scénarios commerciaux réels : pour les scénarios avec un grand volume de données et une mémoire serrée, il est recommandé d'utiliser le mode non comprimé ( use_result () ). À l'heure actuelle, la longueur de colonne maximale renvoyée par att_get sera inexacte, mais les performances seront plus élevées.
Dans l'environnement de développement, vous pouvez rédiger les résultats de AstR_get dans le fichier journal pour une analyse ultérieure plus facile.
file_put_contents('/var/log/mysqli_debug.log', "UPDATE_MAX_LENGTH: " . $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH) . "\n", FILE_APPEND);
Cette méthode est particulièrement adaptée à un débogage lent des requêtes et à une analyse comportementale dans des systèmes complexes, aidant les développeurs à localiser rapidement la source de problèmes.
Supposons que vous développez un système de pagination de liste d'utilisateurs sur m66.net et que vous avez besoin d'aligner les largeurs de colonne de champ dans le tableau. À l' heure
$stmt = $mysqli->prepare("SELECT username, email FROM users LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $limit);
$stmt->execute();
$stmt->store_result();
if ($stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH)) {
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
echo "Champs {$field->name} La longueur maximale est:{$field->max_length}\n";
}
}
De cette façon, la largeur de colonne des tables HTML peut être contrôlée dynamiquement pour améliorer la cohérence de l'interface utilisateur.