<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.mysqlnd.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.config.php',
    1 => 'Laufzeit-Konfiguration',
    2 => 'Laufzeit-Konfiguration',
  ),
  'up' => 
  array (
    0 => 'book.mysqlnd.php',
    1 => 'Mysqlnd',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.install.php',
    1 => 'Installation',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.incompatibilities.php',
    1 => 'Inkompatibilit&auml;ten',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/mysqlnd/config.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqlnd.config" class="chapter">

 <h1 class="title">Laufzeit-Konfiguration</h1>

 <p class="simpara">Das Verhalten dieser Funktionen wird
durch Einstellungen in der <var class="filename">php.ini</var> beeinflusst.</p>

 <p class="para">
  <table id="mysqlnd.config.options" class="doctable table">
   <caption><strong>Konfigurationsoptionen für den MySQL Native Driver</strong></caption>
   
    <thead>
     <tr>
      <th>Name</th>
      <th>Standard</th>
      <th>Veränderbar</th>
      <th>Changelog</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.collect-statistics" class="link">mysqlnd.collect_statistics</a></td>
      <td>&quot;1&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.collect-memory-statistics" class="link">mysqlnd.collect_memory_statistics</a></td>
      <td>&quot;0&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.debug" class="link">mysqlnd.debug</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.log-mask" class="link">mysqlnd.log_mask</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.mempool-default-size" class="link">mysqlnd.mempool_default_size</a></td>
      <td>16000</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-read-timeout" class="link">mysqlnd.net_read_timeout</a></td>
      <td>&quot;86400&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td>
       Vor PHP 7.2.0 war der Standardwert &quot;31536000&quot; und die Veränderbarkeit
       war <strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong>
      </td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-cmd-buffer-size" class="link">mysqlnd.net_cmd_buffer_size</a></td>
      <td>&quot;4096&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-read-buffer-size" class="link">mysqlnd.net_read_buffer_size</a></td>
      <td>&quot;32768&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.sha256-server-public-key" class="link">mysqlnd.sha256_server_public_key</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-perdir">INI_PERDIR</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.trace-alloc" class="link">mysqlnd.trace_alloc</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.fetch_data_copy" class="link">mysqlnd.fetch_data_copy</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td>Entfernt seit PHP 8.1.0</td>
     </tr>

    </tbody>
   
  </table>

  Weitere Details und die Definitionen der
INI_*-Konstanten sind unter <a href="configuration.changes.modes.php" class="xref">Wo Konfigurationseinstellungen gesetzt werden k&ouml;nnen</a> zu finden.
 </p>

 <p class="para">Hier eine kurze Erklärung der
Konfigurationsoptionen:</p>

 <dl>
  
   <dt id="ini.mysqlnd.collect-statistics">
    <code class="parameter">mysqlnd.collect_statistics</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Aktiviert das Sammeln verschiedener Client-Statistiken, auf die über
     <span class="function"><a href="function.mysqli-get-client-stats.php" class="function">mysqli_get_client_stats()</a></span> und
     <span class="function"><a href="mysqli.get-connection-stats.php" class="function">mysqli_get_connection_stats()</a></span> zugegriffen werden
     kann, und die auch von der Funktion <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> im
     Abschnitt <code class="literal">mysqlnd</code> ausgegeben werden.
    </span>
    <span class="simpara">
     Diese Konfigurationseinstellung aktiviert alle
     <a href="mysqlnd.stats.php" class="link">Statistiken des MySQL Native Drivers</a>
     mit Ausnahme derjenigen, die sich auf die Speicherverwaltung beziehen.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.collect-memory-statistics">
    <code class="parameter">mysqlnd.collect_memory_statistics</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Aktiviert das Sammeln verschiedener Speicherstatistiken, auf die über
     <span class="function"><a href="function.mysqli-get-client-stats.php" class="function">mysqli_get_client_stats()</a></span> und
     <span class="function"><a href="mysqli.get-connection-stats.php" class="function">mysqli_get_connection_stats()</a></span> zugegriffen werden
     kann, und die auch von der Funktion <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> im
     Abschnitt <code class="literal">mysqlnd</code> ausgegeben werden.
    </span>
    <span class="simpara">
     Diese Konfigurationseinstellung aktiviert die Statistiken zur
     Speicherverwaltung innerhalb der gesamten
     <a href="mysqlnd.stats.php" class="link">Statistiken des MySQL Native Drivers</a>.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.debug">
    <code class="parameter">mysqlnd.debug</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Zeichnet die Kommunikation aller Erweiterungen, die
     <code class="literal">mysqlnd</code> verwenden, in der angegebenen Protokolldatei
     auf.
    </span>
    <span class="simpara">
     Das Format der Direktive ist <code class="literal">mysqlnd.debug =
     &quot;option1[,parameter_option1][:option2[,parameter_option2]]&quot;</code>.
    </span>
    <span class="simpara">
     Folgende Optionen stehen für die Formatzeichenkette zur Verfügung:
    </span>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       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.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       a[,file] - Hängt die Trace-Ausgabe an die angegebene Datei an.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       d - Aktiviert die Ausgabe des Makros DBUG_&lt;N&gt; 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.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       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.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       F - Versieht jede Zeile der Debugger-Ausgabe mit dem Namen der
       Quelldatei, die das Makro enthält, das die Ausgabe verursacht.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       i - Versieht jede Zeile der Debugger-Ausgabe mit der PID des aktuellen
       Prozesses.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       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.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       n - Versieht jede Zeile der Debugger-Ausgabe mit der aktuellen Tiefe
       der Funktionsverschachtelung
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       o[,file] - Ähnlich wie a[,file], überschreibt aber die alte Datei und
       hängt nicht an sie an.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       O[,file] - Ähnlich wie A[,file], überschreibt aber die alte Datei und
       hängt nicht an sie an.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       t[,N] - Aktiviert die Verfolgung des Kontrollflusses einer Funktion.
       Die maximale Verschachtelungstiefe wird durch N angegeben. Die
       Voreinstellung für N ist 200.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       x - Aktiviert die Erstellung von Profilen.
      </span>
     </li>
      <li class="listitem">
      <span class="simpara">
       m - Verfolgt die mit der Speicherzuweisung und -freigabe verbundenen
       Aufrufe.
      </span>
     </li>
    </ul>
    <span class="simpara">
     Beispiel:
    </span>
    <div class="example-contents">
<div class="cdata"><pre>
d:t:x:O,/tmp/mysqlnd.trace
</pre></div>
    </div>

    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Dieses Funktionalität steht nur mit einem sogenannten Debug-Build von
      PHP zur Verfügung.
     </span>
    </p></blockquote>
    <span class="simpara"/>
   </dd>
  
  
   <dt id="ini.mysqlnd.log-mask">
    <code class="parameter">mysqlnd.log_mask</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     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 (&quot;no good index&quot;) (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.
    </span>
    <span class="simpara">
     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.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.mempool-default-size">
    <code class="parameter">mysqlnd.mempool_default_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Die voreingestellte Größe des mysqlnd-Speicherbereichs, der von den
     Ergebnismengen verwendet wird.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-read-timeout">
    <code class="parameter">mysqlnd.net_read_timeout</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <code class="literal">mysqlnd</code> und die MySQL Client Library
     <code class="literal">libmysqlclient</code> verwenden unterschiedliche
     Netzwerk-APIs. So verwendet <code class="literal">mysqlnd</code> PHP-Streams,
     während <code class="literal">libmysqlclient</code> 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
     <var class="filename">php.ini</var> über
     <code class="literal">default_socket_timeout</code> eingestellt. Diese Vorgabe
     gilt für alle Streams, die keinen anderen Wert für das Zeitlimit setzen.
     <code class="literal">mysqlnd</code> setzt keinen anderen Wert, weshalb
     Verbindungen von lang laufenden Abfragen nach
     <code class="literal">default_socket_timeout</code> Sekunden getrennt werden
     können, was die Fehlermeldung <q class="quote">2006 - MySQL Server has gone
     away</q> 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. <code class="literal">mysqlnd</code> benutzt
     nun das gleiche sehr lange Zeitlimit. Der Wert ist über eine neue
     Einstellung in der <var class="filename">php.ini</var> konfigurierbar:
     <code class="literal">mysqlnd.net_read_timeout</code>.
     <code class="literal">mysqlnd.net_read_timeout</code> wird von jeder Erweiterung
     verwendet, die <code class="literal">mysqlnd</code> verwendet
     (<code class="literal">ext/mysql</code>, <code class="literal">ext/mysqli</code> und
     <code class="literal">PDO_MySQL</code>). <code class="literal">mysqlnd</code> weist
     PHP-Streams an, <code class="literal">mysqlnd.net_read_timeout</code> zu
     verwenden. Zu beachten ist, dass es subtile Unterschiede zwischen
     <code class="literal">MYSQL_OPT_READ_TIMEOUT</code> aus der MySQL Client Library
     und PHP-Streams geben kann. Zum Beispiel gilt
     <code class="literal">MYSQL_OPT_READ_TIMEOUT</code> 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.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-cmd-buffer-size">
    <code class="parameter">mysqlnd.net_cmd_buffer_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <code class="literal">mysqlnd</code> weist jeder Verbindung einen internen
     Befehls-/Netzwerkpuffer von
     <code class="literal">mysqlnd.net_cmd_buffer_size</code> Bytes zu (in der
     <var class="filename">php.ini</var>). Wenn ein Befehl des
     MySQL-Client-Server-Protokolls, zum Beispiel
     <code class="literal">COM_QUERY</code> (<q class="quote">normale</q> Abfrage), nicht in
     den Puffer passt, vergrößert <code class="literal">mysqlnd</code> 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
     <code class="literal">command_buffer_too_small</code> um eins erhöht.
    </span>
    <span class="simpara">
     Wenn <code class="literal">mysqlnd</code> den Puffer bei fast jeder Verbindung
     über seine anfängliche Größe von
     <code class="literal">mysqlnd.net_cmd_buffer_size</code> Bytes hinaus vergrößern
     muss, sollten in Betracht gezogen werden, die Standardgröße zu erhöhen,
     um Neuzuweisungen zu vermeiden.
    </span>
    <span class="simpara">
     Die voreingestellte Puffergröße beträgt 4096 Bytes, was der
     kleinstmögliche Wert ist.
    </span>
    <span class="simpara">
     Der Wert kann auch mittels <code class="literal">mysqli_options(link,
     MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size)</code> gesetzt werden.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-read-buffer-size">
    <code class="parameter">mysqlnd.net_read_buffer_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     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.
     <code class="literal">mysqlnd</code> liest den Körper in Stücken von
     <code class="literal">MIN(header.size, mysqlnd.net_read_buffer_size)</code> Bytes.
     Wenn ein Paketkörper größer als
     <code class="literal">mysqlnd.net_read_buffer_size</code> Bytes ist, muss
     <code class="literal">mysqlnd</code> den Befehl <code class="literal">read()</code> mehrfach
     aufrufen.
    </span>
    <span class="simpara">
     Der Wert kann auch mittels <code class="literal">mysqli_options(link,
     MYSQLI_OPT_NET_READ_BUFFER_SIZE, size)</code> gesetzt werden.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.sha256-server-public-key">
    <code class="parameter">mysqlnd.sha256_server_public_key</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     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.
    </span>
    <span class="simpara">
     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
     <span class="function"><a href="mysqli.options.php" class="function">mysqli_options()</a></span>. Wird vom Client kein öffentlicher
     RSA-Schlüssel angegeben, wird der Schlüssel im Rahmen des
     Standard-Authentifizierungsverfahrens des
     SHA-256-Authentifizierungs-Plugins ausgetauscht.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.trace-alloc">
    <code class="parameter">mysqlnd.trace_alloc</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.fetch_data_copy">
    <code class="parameter">mysqlnd.fetch_data_copy</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     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
     <a href="mysqlnd.memory.php" class="link">Implementierung der Speicherverwaltung</a>
     zu finden.
    </span>
    <span class="simpara">
     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.
    </span>
    <span class="simpara">
     Dies darf nicht gesetzt werden, wenn PDO_MySQL verwendet wird. PDO_MySQL
     unterstützt diesen neuen Abrufmodus noch nicht.
    </span>
    <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
     <span class="simpara">
      Diese Einstellung wurde in PHP 8.1.0 entfernt.
     </span>
    </p></blockquote>
   </dd>
  
 </dl>
</div>
<?php manual_footer($setup); ?>