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.
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.
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.
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:
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
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
}
]
}
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.
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.
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.
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.
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.