Es folgt eine Liste der Funktionen, die in der Plugin-API von
   mysqlnd zur Verfügung stehen:
  
mysqlnd_plugin_register()
mysqlnd_plugin_count()
mysqlnd_plugin_get_plugin_connection_data()
mysqlnd_plugin_get_plugin_result_data()
mysqlnd_plugin_get_plugin_stmt_data()
mysqlnd_plugin_get_plugin_net_data()
mysqlnd_plugin_get_plugin_protocol_data()
mysqlnd_conn_get_methods()
mysqlnd_result_get_methods()
mysqlnd_result_meta_get_methods()
mysqlnd_stmt_get_methods()
mysqlnd_net_get_methods()
mysqlnd_protocol_get_methods()
Es gibt keine formale Definition dafür, was ein Plugin ist und wie ein Plugin-Mechanismus funktioniert.
Folgende Komponenten werden häufig in Plugin-Mechanismen verwendet:
Ein Plugin-Manager
Eine Plugin-API
Anwendungsdienste (oder Module)
Anwendungsdienst-APIs (oder Modul-APIs)
   Das Plugin-Konzept von mysqlnd nutzt diese Merkmale und
   zeichnet sich zudem durch eine offene Architektur aus.
  
Keine Einschränkungen
   Ein Plugin hat uneingeschränkten Zugriff auf die inneren Abläufe von
   mysqlnd. Es gibt keine Sicherheitsbeschränkungen oder
   Einschränkungen. Alles kann überschrieben werden, um nützliche oder
   schädliche Algorithmen zu implementieren. Es wird empfohlen, nur Plugins
   aus einer vertrauenswürdigen Quelle einzusetzen.
  
Wie bereits erwähnt, können Plugins Zeiger beliebig verwenden. Diese Zeiger sind in keiner Weise eingeschränkt und können auf die Daten eines anderen Plugins zeigen. Mit einer einfachen Offset-Berechnung können die Daten eines anderen Plugins gelesen werden.
   Es wird empfohlen, kooperative Plugins zu schreiben und immer die
   Elternmethode aufzurufen. Die Plugins sollten immer mit
   mysqlnd selbst zusammenarbeiten.
  
| Erweiterung | mysqlnd.query()-Zeiger | Aufrufstapel (Call Stack) bei Aufruf der Elternmethode | 
|---|---|---|
| ext/mysqlnd | mysqlnd.query() | mysqlnd.query | 
| ext/mysqlnd_cache | mysqlnd_cache.query() | 
 | 
| ext/mysqlnd_monitor | mysqlnd_monitor.query() | 
 | 
   In diesem Szenario werden ein Cache-Plugin
   (ext/mysqlnd_cache) und ein Überwachungs-Plugin
   (ext/mysqlnd_monitor) geladen. Beide sind Unterklassen
   von Connection::query(). Die Registrierung der Plugins
   erfolgt während MINIT gemäß der zuvor gezeigten Logik.
   PHP ruft Erweiterungen standardmäßig in alphabetischer Reihenfolge auf. Die
   Plugins wissen nichts voneinander und definieren keine Abhängigkeiten von
   den Erweiterungen.
  
Standardmäßig rufen die Plugins die übergeordnete Implementierung der Abfragemethode in ihrer abgeleiteten Version der Methode auf.
Zusammenfassung des Verhaltens einer PHP-Erweiterung
   Die folgende Zusammenfassung zeigt, was passiert, wenn das Beispiel-Plugin
   ext/mysqlnd_plugin verwendet wird, das die C-Plugin-API
   von mysqlnd für PHP verfügbar macht:
  
Jede PHP-Anwendung, die MySQL verwendet, versucht, eine Verbindung zu 192.168.2.29 herzustellen
     Die PHP-Anwendung verwendet entweder ext/mysql,
     ext/mysqli oder PDO_MYSQL. Alle
     drei PHP-MySQL-Erweiterungen verwenden mysqlnd, um die
     Verbindung zu 192.168.2.29 herzustellen.
    
     Mysqlnd ruft seine Verbindungsmethode auf, die von
     ext/mysqlnd_plugin abgeleitet wurde.
    
     ext/mysqlnd_plugin ruft den vom Benutzer registrierten
     Userspace-Hook, die Methode proxy::connect(), auf.
    
     Dieser Userspace-Hook ändert die IP-Adresse des Hosts, zu dem eine
     Verbindung aufgebaut werden soll, von 192.168.2.29 auf 127.0.0.1 und gibt
     die von parent::connect() hergestellte Verbindung
     zurück.
    
     ext/mysqlnd_plugin bewirkt dasselbe wie
     parent::connect(127.0.0.1), indem es die ursprüngliche
     mysqlnd-Methode aufruft, um eine Verbindung
     herzustellen.
    
    ext/mysqlnd stellt die Verbindung her und gibt sie
    an ext/mysqlnd_plugin zurück, das sie seinerseits
    zurückgibt.
    
Unabhängig davon, welche PHP-MySQL-Erweiterung die Anwendung verwendet, erhält sie eine Verbindung zu 127.0.0.1. Die PHP-MySQL-Erweiterung übergibt die Kontrolle wieder an die PHP-Anwendung. Der Zyklus ist geschlossen.
