Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
| Name | Standard | Veränderbar | Changelog | 
|---|---|---|---|
| mysqlnd.collect_statistics | "1" | INI_SYSTEM | |
| mysqlnd.collect_memory_statistics | "0" | INI_SYSTEM | |
| mysqlnd.debug | "" | INI_SYSTEM | |
| mysqlnd.log_mask | 0 | INI_ALL | |
| mysqlnd.mempool_default_size | 16000 | INI_ALL | |
| mysqlnd.net_read_timeout | "86400" | INI_ALL | Vor PHP 7.2.0 war der Standardwert "31536000" und die Veränderbarkeit
       war INI_SYSTEM | 
| mysqlnd.net_cmd_buffer_size | "4096" | INI_SYSTEM | |
| mysqlnd.net_read_buffer_size | "32768" | INI_SYSTEM | |
| mysqlnd.sha256_server_public_key | "" | INI_PERDIR | |
| mysqlnd.trace_alloc | "" | INI_SYSTEM | |
| mysqlnd.fetch_data_copy | 0 | INI_ALL | Entfernt seit PHP 8.1.0 | 
Hier eine kurze Erklärung der Konfigurationsoptionen:
mysqlnd.collect_statistics
     bool
    
      Aktiviert das Sammeln verschiedener Client-Statistiken, auf die über
      mysqli_get_client_stats() und
      mysqli_get_connection_stats() zugegriffen werden
      kann, und die auch von der Funktion phpinfo() im
      Abschnitt mysqlnd ausgegeben werden.
     
Diese Konfigurationseinstellung aktiviert alle Statistiken des MySQL Native Drivers mit Ausnahme derjenigen, die sich auf die Speicherverwaltung beziehen.
mysqlnd.collect_memory_statistics
     bool
    
      Aktiviert das Sammeln verschiedener Speicherstatistiken, auf die über
      mysqli_get_client_stats() und
      mysqli_get_connection_stats() zugegriffen werden
      kann, und die auch von der Funktion phpinfo() im
      Abschnitt mysqlnd ausgegeben werden.
     
Diese Konfigurationseinstellung aktiviert die Statistiken zur Speicherverwaltung innerhalb der gesamten Statistiken des MySQL Native Drivers.
mysqlnd.debug
     string
    
      Zeichnet die Kommunikation aller Erweiterungen, die
      mysqlnd verwenden, in der angegebenen Protokolldatei
      auf.
     
      Das Format der Direktive ist mysqlnd.debug =
      "option1[,parameter_option1][:option2[,parameter_option2]]".
     
Folgende Optionen stehen für die Formatzeichenkette zur Verfügung:
A[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an. Stellt außerdem sicher, dass die Daten nach jedem Schreibvorgang geschrieben werden. Zu diesem Zweck wird die Trace-Datei geschlossen und erneut geöffnet (was recht langsam ist). Dies trägt dazu bei, dass auch bei einem Absturz der Anwendung eine vollständige Protokolldatei vorhanden ist.
a[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an.
d - Aktiviert die Ausgabe des Makros DBUG_<N> für den aktuellen Zustand. Es kann eine Liste mit Schlüsselwörtern angehängt werden, um nur die Ausgaben des DBUG-Makros auszuwählen, die diese Schlüsselwörter enthalten. Wenn eine leere Liste angegeben wird, werden alle Makros ausgegeben.
f[,functions] - Beschränkt die Aktivitäten des Debuggers auf die angegebene Liste von Funktionen. Eine leere Liste impliziert, dass alle Funktionen ausgewählt werden.
F - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, das die Ausgabe verursacht.
i - Versieht jede Zeile der Debugger-Ausgabe mit der PID des aktuellen Prozesses.
L - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der Quelldatei, die das Makro enthält, sowie der Zeile des Makros, das diese Ausgabe verursacht.
n - Versieht jede Zeile der Debugger-Ausgabe mit der aktuellen Tiefe der Funktionsverschachtelung
o[,file] - Ähnlich wie a[,file], überschreibt aber die alte Datei und hängt nicht an sie an.
O[,file] - Ähnlich wie A[,file], überschreibt aber die alte Datei und hängt nicht an sie an.
t[,N] - Aktiviert die Verfolgung des Kontrollflusses einer Funktion. Die maximale Verschachtelungstiefe wird durch N angegeben. Die Voreinstellung für N ist 200.
x - Aktiviert die Erstellung von Profilen.
m - Verfolgt die mit der Speicherzuweisung und -freigabe verbundenen Aufrufe.
Beispiel:
d:t:x:O,/tmp/mysqlnd.trace
Hinweis:
Dieses Funktionalität steht nur mit einem sogenannten Debug-Build von PHP zur Verfügung.
mysqlnd.log_mask
     int
    Legt fest, welche Abfragen protokolliert werden sollen. Der Standardwert ist 0, was die Protokollierung deaktiviert. Die Definition erfolgt mit einer Ganzzahl und nicht mit PHP-Konstanten. Ein Wert von 48 (16 + 32) protokolliert zum Beispiel langsame Abfragen, die entweder einen fehlerhaften Index ("no good index") (SERVER_QUERY_NO_GOOD_INDEX_USED = 16) oder überhaupt keinen Index (SERVER_QUERY_NO_INDEX_USED = 32) verwenden. Ein Wert von 2043 (1 + 2 + 8 + ... + 1024) protokolliert alle langsamen Abfragetypen.
Folgende Typen stehen zur Verfügung: SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16, SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128, SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512 und SERVER_QUERY_WAS_SLOW=1024.
mysqlnd.mempool_default_size
     int
    Die voreingestellte Größe des mysqlnd-Speicherbereichs, der von den Ergebnismengen verwendet wird.
mysqlnd.net_read_timeout
     int
    
      mysqlnd und die MySQL Client Library
      libmysqlclient verwenden unterschiedliche
      Netzwerk-APIs. So verwendet mysqlnd PHP-Streams,
      während libmysqlclient den eigenen Wrapper für die
      Netzwerkaufrufe der Betriebssystemebene verwendet. PHP setzt für das
      Lesen von Streams standardmäßig ein Zeitlimit von 60s. Dies wird in der
      php.ini über
      default_socket_timeout eingestellt. Diese Vorgabe
      gilt für alle Streams, die keinen anderen Wert für das Zeitlimit setzen.
      mysqlnd setzt keinen anderen Wert, weshalb
      Verbindungen von lang laufenden Abfragen nach
      default_socket_timeout Sekunden getrennt werden
      können, was die Fehlermeldung 2006 - MySQL Server has gone
      away
 zur Folge hat. Die MySQL Client Library setzt standardmäßig
      ein Zeitlimit von 24 * 3600 Sekunden (1 Tag) und wartet auf andere
      Zeitlimits, z. B. TCP/IP-Zeitlimits. mysqlnd benutzt
      nun das gleiche sehr lange Zeitlimit. Der Wert ist über eine neue
      Einstellung in der php.ini konfigurierbar:
      mysqlnd.net_read_timeout.
      mysqlnd.net_read_timeout wird von jeder Erweiterung
      verwendet, die mysqlnd verwendet
      (ext/mysql, ext/mysqli und
      PDO_MySQL). mysqlnd weist
      PHP-Streams an, mysqlnd.net_read_timeout zu
      verwenden. Zu beachten ist, dass es subtile Unterschiede zwischen
      MYSQL_OPT_READ_TIMEOUT aus der MySQL Client Library
      und PHP-Streams geben kann. Zum Beispiel gilt
      MYSQL_OPT_READ_TIMEOUT laut Dokumentation nur für
      TCP/IP-Verbindungen und, vor MySQL 5.1.2, nur unter Windows. PHP-Streams
      haben diese Einschränkung möglicherweise nicht. Im Zweifelsfall sollte
      die Dokumentation von Streams zu Rate gezogen werden.
     
mysqlnd.net_cmd_buffer_size
     int
    
      mysqlnd weist jeder Verbindung einen internen
      Befehls-/Netzwerkpuffer von
      mysqlnd.net_cmd_buffer_size Bytes zu (in der
      php.ini). Wenn ein Befehl des
      MySQL-Client-Server-Protokolls, zum Beispiel
      COM_QUERY (normale
 Abfrage), nicht in
      den Puffer passt, vergrößert mysqlnd den Puffer auf
      die für das Senden des Befehls erforderliche Größe. Jedes Mal, wenn der
      Puffer für eine Verbindung erweitert wird, wird
      command_buffer_too_small um eins erhöht.
     
      Wenn mysqlnd den Puffer bei fast jeder Verbindung
      über seine anfängliche Größe von
      mysqlnd.net_cmd_buffer_size Bytes hinaus vergrößern
      muss, sollten in Betracht gezogen werden, die Standardgröße zu erhöhen,
      um Neuzuweisungen zu vermeiden.
     
Die voreingestellte Puffergröße beträgt 4096 Bytes, was der kleinstmögliche Wert ist.
      Der Wert kann auch mittels mysqli_options(link,
      MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size) gesetzt werden.
     
mysqlnd.net_read_buffer_size
     int
    
      Die maximale Größe des gelesenen Teilstücks in Bytes, wenn der Inhalt
      eines MySQL-Befehlspakets gelesen wird. Das
      MySQL-Client-Server-Protokoll kapselt alle seine Befehle in Paketen. Die
      Pakete bestehen aus einem kleinen Kopf und einem Textkörper mit dem
      eigentlichen Inhalt. Die Größe des Körpers ist im Kopfteil kodiert.
      mysqlnd liest den Körper in Stücken von
      MIN(header.size, mysqlnd.net_read_buffer_size) Bytes.
      Wenn ein Paketkörper größer als
      mysqlnd.net_read_buffer_size Bytes ist, muss
      mysqlnd den Befehl read() mehrfach
      aufrufen.
     
      Der Wert kann auch mittels mysqli_options(link,
      MYSQLI_OPT_NET_READ_BUFFER_SIZE, size) gesetzt werden.
     
mysqlnd.sha256_server_public_key
     string
    Diese Option bezieht sich auf das SHA-256-Authentifizierungs-Plugin und enthält den Pfad zur Datei mit dem öffentlichen RSA-Schlüssel des MySQL-Servers.
Der Client kann entweder auf die Angabe eines öffentlichen RSA-Schlüssels verzichten, den Schlüssel über diese PHP-Konfigurationseinstellung angeben oder zur Laufzeit mittels mysqli_options(). Wird vom Client kein öffentlicher RSA-Schlüssel angegeben, wird der Schlüssel im Rahmen des Standard-Authentifizierungsverfahrens des SHA-256-Authentifizierungs-Plugins ausgetauscht.
mysqlnd.trace_alloc
     string
    
mysqlnd.fetch_data_copy
     int
    Erzwingt das Kopieren von Ergebnismengen aus den internen Ergebnismengenpuffern in PHP-Variablen, anstatt die standardmäßige Referenz- und Copy-on-Write-Logik zu verwenden. Weitere Details sind in den Hinweisen zur Implementierung der Speicherverwaltung zu finden.
Wenn Ergebnismengen kopiert werden, anstatt sie von PHP-Variablen referenzieren zu lassen, kann der für die PHP-Variablen belegte Speicher früher freigegeben werden. Je nach API-Code des Benutzers, den tatsächlichen Datenbankabfragen und der Größe ihrer Ergebnismengen kann dies den Speicherbedarf von mysqlnd verringern.
Dies darf nicht gesetzt werden, wenn PDO_MySQL verwendet wird. PDO_MySQL unterstützt diesen neuen Abrufmodus noch nicht.
Hinweis: Diese Einstellung wurde in PHP 8.1.0 entfernt.
