Lors de l'exploitation de bases de données MySQL dans PHP, l'extension MySQLI fournit des fonctions et des interfaces riches pour aider les développeurs à traiter les données plus efficacement. Parmi eux, la fonction mysqli_stmt :: att_get est une méthode de l'objet mysqli_stmt . Bien que la fréquence d'utilisation ne soit pas aussi élevée que les paramètres de liaison et l'exécution de requêtes, dans certains scénarios spécifiques, il peut aider les développeurs à mieux gérer et optimiser l'utilisation de la mémoire et améliorer les performances du programme.
Cet article introduira en détail les principes fonctionnels, les scénarios d'application de mysqli_stmt :: att_get , et comment obtenir une optimisation de mémoire plus efficace à l'aide de cette méthode.
mysqli_stmt :: att_get est une fonction utilisée pour obtenir la valeur d'attribut de l'instruction de prétraitement actuelle. Le prototype de fonction est le suivant:
public mysqli_stmt::attr_get(int $attr): mixed
Le paramètre $ attrait est la constante d'attribut à la requête, par exemple:
Mysqli_stmt_attr_update_max_length (s'il faut mettre à jour la longueur maximale)
Mysqli_stmt_attr_cursor_type (type de curseur)
etc.
En appelant cette méthode, les développeurs peuvent comprendre l'état et la configuration de l'instruction actuelle et effectuer des ajustements correspondants.
Lorsque vous utilisez MySQLI pour de grandes quantités d'opérations de données, la consommation de mémoire devient souvent un problème qui ne peut pas être ignoré. Surtout dans les requêtes par lots et les scripts de longue date, une allocation de mémoire déraisonnable peut entraîner des goulots d'étranglement de performances et même des accidents de programme.
D'une manière générale, les programmes PHP allouent les données de cache de mémoire lors de l'exécution des instructions SQL, et en configurant raisonnablement les propriétés de l'objet mysqli_stmt , vous pouvez contrôler comment la mémoire est utilisée. Par exemple, le réglage de la mise à jour du cache maximum, du type de curseur, etc. affectera l'utilisation et la libération de la mémoire.
En appelant MySQLI_STMT :: ATTR_GET , vous pouvez obtenir les attributs de l'instruction actuelle, déterminant ainsi si les attributs doivent être ajustés pour enregistrer la mémoire. Donnons un exemple simple:
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM large_table WHERE id > ?");
$stmt->bind_param("i", $id);
$id = 0;
// Obtenez si l'attribut de longueur de mise à jour est actuellement activé
$updateMaxLength = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if (!$updateMaxLength) {
// Décidez de démarrer en fonction des besoins commerciaux,Pour enregistrer la mémoire
// Les propriétés de réglage ne sont pas démontrées ici,Faire uniquement des jugements
}
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// Traitement des données
}
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, Astr_get est utilisé pour détecter si la fonction de longueur de mise à jour est activée pour l'instruction. Lorsque cette fonctionnalité est activée, MySQLI met automatiquement à jour la longueur maximale du champ Set Set, qui consomme de la mémoire supplémentaire. Si cette fonction n'est pas requise dans un scénario d'entreprise, vous pouvez le désactiver en définissant les attributs correspondants pour enregistrer la mémoire.
L'utilisation d'attrump_get seule ne peut lire que l'état, mais combiné avec la méthode MySQLI_STMT :: att_set , les propriétés peuvent être ajustées dynamiquement pour obtenir l'optimisation de la mémoire:
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM large_table");
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
// Si le type de curseur actuel n'est pas requis,Ajustez-vous sans curseur pour réduire les frais généraux de mémoire
if ($currentCursorType !== MYSQLI_CURSOR_TYPE_NO_CURSOR) {
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR);
}
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// Traitement des affaires
}
$stmt->close();
$mysqli->close();
?>
L'accent ici est d'utiliser le mode sans malédiction pour éviter que le côté serveur de conserver des ressources supplémentaires pour l'ensemble de résultats, réduisant ainsi l'utilisation de la mémoire.
Lors du traitement des données à grande échelle : en interrogeant les attributs de l'instruction, déterminez s'il y a une utilisation inutile de la mémoire.
Scripts de longue durée : ajustez dynamiquement les propriétés pour éviter les fuites de mémoire et les caches inutiles.
Étape de réglage des performances : En conjonction avec d'autres indicateurs de performance, localisez avec précision les goulots d'étranglement de mémoire.
Bien que MySQLI_STMT :: ATTR_GET semble être une méthode auxiliaire, il fournit aux développeurs PHP des moyens d'observer et de contrôler les propriétés de l'instruction de prétraitement pour aider à optimiser l'utilisation de la mémoire. Combinées à des stratégies d'ajustement d'attributs raisonnables, les performances des applications à forte intensité de données peuvent être considérablement améliorées.
Pour les développeurs qui utilisent PHP pour des opérations de base de données complexes, la maîtrise de ces détails peut aider à créer un système plus efficace et stable.