Position actuelle: Accueil> Derniers articles> Comment voir l'effet de l'attlate dans les outils de débogage?

Comment voir l'effet de l'attlate dans les outils de débogage?

M66 2025-05-23

Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, MySQLI_STMT :: ATTR_GET est une fonction relativement impopulaire mais pratique. Il est utilisé pour obtenir les propriétés de la poignée de l'énoncé actuel et est généralement utilisé pour déboguer ou diagnostiquer un comportement sous-jacent. Afin de comprendre l'effet d'exécution de cette fonction plus clairement, nous pouvons utiliser des outils de débogage pour observer son processus de travail interne.

Qu'est-ce que MySQLI_STMT :: att_get

mysqli_stmt :: att_get (int $ attribut): int | false est une méthode de la classe mysqli_stmt . Il accepte une constante d'attribut en tant que paramètre et renvoie la valeur actuelle de l'attribut correspondant. S'il échoue, false est renvoyé.

Les attributs $ communs comprennent:

  • Mysqli_stmt_attr_update_max_length : obtient si la mise à jour maximale de longueur de colonne est définie.

  • Mysqli_stmt_attr_cursor_type : obtient le type de curseur utilisé par l'instruction.

Pourquoi déboguez att_get

Habituellement, les développeurs accordent plus d'attention aux paramètres de liaison, à l'exécution et à l'obtention de résultats lors de l'utilisation de mysqli_stmt . Cependant, lorsque vous rencontrez certains problèmes de performance ou de comportement, tels que la troncature des résultats, les exceptions de mécanisme tampon, etc., vous devez afficher en profondeur l'état d'attribut de la poignée de l'instruction. À l'heure actuelle, Att_get est particulièrement important.

Observer Attr_get à l'aide d'outils de débogage

1. Utilisation du code xdebug + vs

XDebug est un puissant outil de débogage pour PHP. Il peut afficher intuitivement la valeur de retour et le chemin d'exécution d'une fonction avec le code Visual Studio.

Les étapes sont les suivantes:

  1. Installer et configurer xdebug:

     zend_extension=xdebug
    xdebug.mode=debug
    xdebug.start_with_request=yes
    xdebug.client_host=127.0.0.1
    xdebug.client_port=9003
    
  2. Démarrer contre le code et configurer .vscode / launch.json :

     {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Listen for Xdebug",
          "type": "php",
          "request": "launch",
          "port": 9003
        }
      ]
    }
    
  3. Définir les points d'arrêt, l'exemple de code est le suivant:

     $mysqli = new mysqli("localhost", "user", "pass", "database");
    $stmt = $mysqli->prepare("SELECT * FROM users WHERE status = ?");
    $stmt->bind_param("s", $status);
    $status = 'active';
    $stmt->execute();
    
    $cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE); // Définir les points d'arrêt
    var_dump($cursor_type);
    

    Pendant le débogage, la valeur de retour de $ cursor_type peut être clairement observée dans le moniteur variable de l'IDE.

2. Utilisez des méthodes de journalisation

Si vous ne pouvez pas utiliser l'IDE ou le débogage à distance, vous pouvez suivre l'effet de ATTR_GET par journalisation manuelle:

 $log_file = '/var/log/mysqli_debug.log';

function log_debug($msg) {
    file_put_contents($log_file, date("[Y-m-d H:i:s] ") . $msg . PHP_EOL, FILE_APPEND);
}

$mysqli = new mysqli("localhost", "user", "pass", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE status = ?");
$stmt->bind_param("s", $status);
$status = 'active';
$stmt->execute();

$cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
log_debug("Cursor type: " . var_export($cursor_type, true));

Vous pouvez voir si la valeur d'attribut est attendue dans le journal, par exemple si le curseur côté serveur est utilisé, etc.

3. Afficher les informations d'exécution sous-jacentes (niveau étendu)

Si un débogage supplémentaire est nécessaire, par exemple, si vous soupçonnez que le comportement d'extension interne MySQLI est anormal, vous pouvez compiler PHP et casser les points à l'implémentation C de MySQLI_STMT_ATTR_GET . Cette méthode convient aux développeurs C et aux mainteneurs d'extension, et il n'est pas recommandé pour les développeurs ordinaires de l'essayer.

Exemple d'environnement de démonstration

Pour être plus convaincant, vous pouvez créer une page de test simple placée sur http://m66.net/debug/attr_get_demo.php , qui contient un code de démonstration complet pour afficher directement les valeurs d'attribut via var_dump et sortie de la page. De cette façon, même s'il n'y a pas de débogueur, vous pouvez voir l'effet de fonction intuitivement.

résumé

Avec mysqli_stmt :: att_get , vous pouvez obtenir plus précisément l'état de contexte de l'exécution de l'instruction pendant le débogage. Que ce soit via le débogage XDebug, le journal de journalisation ou la visualisation du code C sous-jacent, c'est un outil important pour vous de maîtriser le comportement de la base de données. Il est recommandé d'ajouter ces techniques de débogage lors du réglage des performances et du diagnostic de compatibilité pour améliorer l'efficacité du positionnement des problèmes.