Position actuelle: Accueil> Derniers articles> Comment imprimer les informations de débogage lors du débogage d'attruts?

Comment imprimer les informations de débogage lors du débogage d'attruts?

M66 2025-05-22

Lors des instructions de prétraitement MySQLI à l'aide de la fonction MySQLI_STMT :: ATTR_GET , les développeurs rencontrent souvent des problèmes tels que des valeurs de retour claires et un comportement incohérent. Afin d'améliorer l'efficacité du débogage et de localiser les problèmes, nous pouvons utiliser certaines méthodes pour imprimer des informations de débogage détaillées. Cet article présentera plusieurs techniques de débogage pratiques et combinera des exemples de code PHP pour vous aider à mieux comprendre le processus de débogage de mysqli_stmt :: att_get .

1. Comprendre le rôle de mysqli_stmt :: att_get

mysqli_stmt :: att_get est utilisé pour obtenir la valeur d'attribut associée à la poignée de l'instruction. En règle générale, il est utilisé pour vérifier certaines propriétés internes, telles que les paramètres des requêtes tamponnées:

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

La valeur de retour peut être un entier indiquant l'état actuel de la propriété. Si FALSE est retourné, cela signifie que l'acquisition a échoué et que un diagnostic supplémentaire est nécessaire.

2. Activer les rapports d'erreur et les journaux détaillés

Avant le débogage, vous devez d'abord vous assurer que le mécanisme de rapport d'erreur PHP est activé:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
error_reporting(E_ALL);
ini_set('display_errors', 1);

Ce code entraînera toutes les erreurs MySQLI pour lancer des exceptions et les afficher directement sur la page, afin que nous puissions découvrir instantanément des problèmes.

3. Encapsulation et débogage des fonctions auxiliaires

Pour faciliter le débogage de la valeur de retour de AstR_get , une fonction d'assistance peut être encapsulée:

 function debug_attr_get(mysqli_stmt $stmt, int $attr) {
    try {
        $value = $stmt->attr_get($attr);
        if ($value === false) {
            echo "Impossible d'obtenir des attributs(ID: $attr): retour false\n";
        } else {
            echo "propriété(ID: $attr)valeur: $value\n";
        }
    } catch (mysqli_sql_exception $e) {
        echo "Catch Exceptions: " . $e->getMessage() . "\n";
    }
}

Comment utiliser:

 $mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
debug_attr_get($stmt, MYSQLI_STMT_ATTR_CURSOR_TYPE);

4. Combiné avec des informations de débogage de l'exploitation forestière

Dans les environnements de production, vous ne voudrez peut-être pas produire des informations de débogage directement à l'avant. Les informations de débogage peuvent être conservées par journalisation:

 function log_debug_info($message) {
    file_put_contents('/var/log/php_debug.log', date('Y-m-d H:i:s') . " - $message\n", FILE_APPEND);
}

Combinez cela avec les fonctions de débogage:

 function debug_attr_get_to_log(mysqli_stmt $stmt, int $attr) {
    try {
        $value = $stmt->attr_get($attr);
        $msg = ($value === false) ? "attr_get retour false" : "attr_get valeur为: $value";
    } catch (mysqli_sql_exception $e) {
        $msg = "anormal: " . $e->getMessage();
    }
    log_debug_info("propriété ID $attr - $msg");
}

5. Simuler le débogage de l'environnement réel

Parfois, les paramètres de propriété peuvent dépendre d'autres paramètres de la connexion ou de l'instruction. Par exemple:

 $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_SCROLLABLE);

Uniquement en appelant ATTR_GET que vous pouvez observer la modification de la valeur d'attribut. Par conséquent, il convient de s'assurer que la logique d'exécution de l'application réelle est simulée pendant le débogage, plutôt que de tester une certaine fonction isolément.

6. Débogage de la connexion ou de l'échec de l'énoncé

Si Prépare () est appelé retourne false , la variable $ stmt est un objet non valide, et l'appel ATTR_GET provoquera une erreur fatale. Pour ce faire, vous pouvez ajouter une vérification de la connexion et de la préparation des déclarations:

 if (!$stmt) {
    die("Échec de la déclaration: " . $mysqli->error);
}

7. Utilisez Curl pour simuler les demandes de serveur de débogage à distance

Dans certains scénarios, vous devrez peut-être déboguer à distance une logique API ou Server, et vous pouvez utiliser Curl pour appeler les scripts PHP pour les tests. Par exemple:

 $url = "https://m66.net/api/debug_stmt.php";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

Vous pouvez déployer le code de débogage dans un script sous le nom de domaine m66.net pour observer l'effet réel en conjonction avec le journal.

Conclusion

Grâce aux méthodes ci-dessus, vous pouvez plus clairement comprendre l'état et le comportement de mysqli_stmt :: att_get au moment de l'exécution. Les opérations de base de données de débogage ne concernent pas seulement la question de savoir si SQL est exécutée avec succès, mais plus important encore, il s'agit de comprendre le comportement sous-jacent, en particulier lors de la définition de fonctions connexes à l'aide de propriétés MySQLI. J'espère que les compétences de cet article pourront vous aider à localiser rapidement les problèmes et à améliorer l'efficacité du développement.