Surveillance de base des requête
La surveillance de base d'une requête est simple avec PECL/mysqlnd_uh. Combiné avec la fonction debug_print_backtrace(), ça peut devenir un outil très puissant, par exemple, pour trouver l'origine d'une requête. Ceci peut être nécessaire lors de la recherche de requêtes lentes, mais aussi après une re-factorisation de la base de données pour trouver le code continuant à accéder à une ancienne table ou base de données. Ce genre de recherche peut devenir vite compliqué en l'absence de ce genre d'outils, surtout si vous utilisez une application qui auto-génère des requêtes.
Exemple #1 Surveillance de base
<?php
class conn_proxy extends MysqlndUhConnection {
public function query($res, $query) {
debug_print_backtrace();
return parent::query($res, $query);
}
}
class stmt_proxy extends MysqlndUhPreparedStatement {
public function prepare($res, $query) {
debug_print_backtrace();
return parent::prepare($res, $query);
}
}
mysqlnd_uh_set_connection_proxy(new conn_proxy());
mysqlnd_uh_set_statement_proxy(new stmt_proxy());
printf("Proxies installed...\n");
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "");
var_dump($pdo->query("SELECT 1 AS _one FROM DUAL")->fetchAll(PDO::FETCH_ASSOC));
$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->prepare("SELECT 1 AS _two FROM DUAL");
?>
L'exemple ci-dessus va afficher :
#0 conn_proxy->query(Resource id #19, SELECT 1 AS _one FROM DUAL) #1 PDO->query(SELECT 1 AS _one FROM DUAL) called at [example.php:19] array(1) { [0]=> array(1) { ["_one"]=> string(1) "1" } } #0 stmt_proxy->prepare(Resource id #753, SELECT 1 AS _two FROM DUAL) #1 mysqli->prepare(SELECT 1 AS _two FROM DUAL) called at [example.php:22]
Pour une surveillance de base des requêtes, vous devriez installer une connexion et un proxy de requête préparée. Le proxy de connexion doit surcharger la classe MysqlndUhConnection::query(). Toutes les requêtes de base de données qui n'utilisent pas des requêtes préparées nativement devront appeler cette méthode. Dans l'exemple ci-dessus, la fonction query est invoquée par un appel PDO. Par défaut, PDO_MySQL utilise une émulation de requête préparée.
Toutes les requêtes préparées natives sont préparées avec la méthode prepare de mysqlnd exportée via MysqlndUhPreparedStatement::prepare(). Surchargez la classe MysqlndUhPreparedStatement et écrasez la fonction prepare pour une surveillance des requêtes préparées natives.
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-uh.quickstart.query-monitoring.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.