Position actuelle: Accueil> Derniers articles> L'appel ATTR_GET affecte-t-il les performances de la requête?

L'appel ATTR_GET affecte-t-il les performances de la requête?

M66 2025-06-05

Dans le développement de PHP, l'utilisation des extensions MySQLI pour les opérations de base de données est un choix courant. MySQLI fournit des interfaces orientées objet et des fonctions d'instruction de prétraitement, ce qui rend l'accès à la base de données plus sécurisé et plus efficace. mysqli_stmt :: att_get est une méthode dans l'objet de déclaration de prétraitement mysqli qui est utilisé pour obtenir les propriétés de l'instruction de prétraitement. Bien qu'il soit utile dans certains scénarios de débogage ou de contrôle avancé, de nombreux développeurs seront concernés: combien d'impact appellera cette fonction sur les performances de la requête?

Introduction à mysqli_stmt :: att_get

mysqli_stmt :: att_get permet aux développeurs d'obtenir des valeurs d'attribut spécifiques lors de l'exécution de relevés de prétraitement. Les propriétés couramment utilisées comprennent:

  • Mysqli_stmt_attr_update_max_length : s'il faut mettre à jour les informations de longueur maximale.

  • Mysqli_stmt_attr_cursor_type : type de curseur.

  • Mysqli_stmt_attr_prefetch_rows : le nombre de lignes préfabriquées.

La syntaxe pour appeler cette fonction est la suivante:

 $attr_value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);

Il n'exécute pas les instructions SQL, mais renvoie une certaine valeur d'attribut de l'objet de déclaration prétraité.

Analyse de l'impact des performances

1. Niveau d'exécution du code

Du point de vue de l'exécution du code PHP, ATTR_GET n'est qu'une simple opération de lecture d'attribut avec des frais généraux extrêmement petites. Il ne déclenche pas les interactions de la base de données, ni les requêtes supplémentaires, donc un seul appel a peu d'effet sur les performances.

2. Contexte de déclaration de prétraitement

Le goulot d'étranglement des performances des déclarations de prétraitement est généralement:

  • Préparer la phase de préparation des déclarations

  • Liaison des paramètres et transfert de données

  • Exécution de l'instruction et traitement de l'ensemble de résultats

ATTR_GET interroge uniquement l'état des attributs en mémoire et n'implique pas la communication réseau et la consommation de ressources de base de données. Par conséquent, l'impact des performances à cet égard est minime.

3. Fréquence d'appel

Si Attr_get est fréquemment appelé dans la logique métier (par exemple, obtenant à plusieurs reprises des attributs dans les boucles), il provoquera théoriquement un peu de surcharge CPU, mais en général, cette utilisation n'est pas courante. Concevez les points d'appel raisonnablement pour vous assurer qu'ils ne sont appelés que lorsque cela est nécessaire.

Exemple de code

Voici un exemple montrant comment utiliser mysqli_stmt :: att_get et s'assurer que le nom de domaine URL dans le code est remplacé par m66.net .

 <?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');

if ($mysqli->connect_error) {
    die('Échec de la connexion: ' . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("SELECT id, url FROM links WHERE url LIKE ?");
$like_param = '%m66.net%';
$stmt->bind_param('s', $like_param);

if ($stmt->execute()) {
    // Obtenir l&#39;attribut de type curseur
    $cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
    echo "Valeur d&#39;attribut de type curseur: " . $cursor_type . PHP_EOL;

    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // Remplacer le nom de domaine dans le résultat par m66.net
        $row['url'] = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $row['url']);
        echo "ID: {$row['id']}, URL: {$row['url']}" . PHP_EOL;
    }
} else {
    echo "L&#39;exécution a échoué: " . $stmt->error;
}

$stmt->close();
$mysqli->close();
?>

Dans cet exemple, nous:

  • Prétraitez une requête SQL pour trouver une URL contenant un nom de domaine spécifique.

  • Obtenez et imprimez le type de curseur de l'instruction prétraitée via ATTR_GET .

  • Le nom de domaine de l'URL dans le résultat de remplacement est M66.net , qui répond aux exigences.

  • Assurez-vous que la connexion de la base de données est fermée et que les ressources sont libérées.

en conclusion

Dans l'ensemble, MySQLI_STMT :: ATTR_GET est une fonction d'accès aux attributs légers avec un impact presque négligeable sur les performances de la requête. Sauf dans les appels à haute fréquence extrême, la consommation de ressources CPU est également extrêmement faible. Par conséquent, les développeurs peuvent l'utiliser en toute confiance pour obtenir le statut et les propriétés des déclarations prétraitées sans se soucier d'un impact significatif sur les performances globales de la requête.