<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/mysqli.quickstart.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'mysqli.quickstart.connections.php',
    1 => 'Datenbankverbindungen',
    2 => 'Datenbankverbindungen',
  ),
  'up' => 
  array (
    0 => 'mysqli.quickstart.php',
    1 => 'Kurzanleitung f&uuml;r den schnellen Einstieg',
  ),
  'prev' => 
  array (
    0 => 'mysqli.quickstart.dual-interface.php',
    1 => 'Prozedurale und objektorientierte Schnittstelle',
  ),
  'next' => 
  array (
    0 => 'mysqli.quickstart.statements.php',
    1 => 'Ausf&uuml;hren von Anweisungen',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/mysqli/quickstart.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqli.quickstart.connections" class="section">
  <h2 class="title">Datenbankverbindungen</h2>
  <p class="para">
   Der MySQL-Server unterstützt die Verwendung verschiedener
   Transportschichten für Verbindungen. Verbindungen verwenden TCP/IP,
   Unix-Domain-Sockets oder Windows Named Pipes.
  </p>
  <p class="para">
   Der Hostname <code class="literal">localhost</code> hat eine besondere Bedeutung. Er
   ist an die Verwendung von Unix-Domain-Sockets gebunden. Um eine
   TCP/IP-Verbindung zum Localhost zu öffnen, muss <code class="literal">127.0.0.1</code>
   anstelle des Hostnamens <code class="literal">localhost</code> verwendet werden.
  </p>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Die besondere Bedeutung von localhost</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$mysqli </span><span style="color: #007700">= new </span><span style="color: #0000BB">mysqli</span><span style="color: #007700">(</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #DD0000">"user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"database"</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">host_info </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$mysqli </span><span style="color: #007700">= new </span><span style="color: #0000BB">mysqli</span><span style="color: #007700">(</span><span style="color: #DD0000">"127.0.0.1"</span><span style="color: #007700">, </span><span style="color: #DD0000">"user"</span><span style="color: #007700">, </span><span style="color: #DD0000">"password"</span><span style="color: #007700">, </span><span style="color: #DD0000">"database"</span><span style="color: #007700">, </span><span style="color: #0000BB">3306</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #0000BB">$mysqli</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">host_info </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Localhost via UNIX socket
127.0.0.1 via TCP/IP
</pre></div>
    </div>
   </div>
  </p>
  <p class="para">
   <strong>Standardwerte für Verbindungsparameter</strong>
  </p>
  <p class="para">
   Je nach verwendeter Verbindungsfunktion können verschiedene Parameter
   weggelassen werden. Wenn ein Parameter nicht angegeben wird, versucht die
   Erweiterung, die Standardwerte zu verwenden, die in der
   PHP-Konfigurationsdatei festgelegt sind.
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Beispiel #2 Standardwerte festlegen</strong></p>
    <div class="example-contents">
<div class="inicode"><pre class="inicode">mysqli.default_host=192.168.2.27
mysqli.default_user=root
mysqli.default_pw=&quot;&quot;
mysqli.default_port=3306
mysqli.default_socket=/tmp/mysql.sock</pre>
</div>
    </div>

   </div>
  </p>
  <p class="para">
   Die entsprechenden Parameterwerte werden dann an die Client-Bibliothek
   übergeben, die von der Erweiterung verwendet wird. Wenn die
   Client-Bibliothek leere oder nicht gesetzte Parameter findet, kann sie die
   Standardwerte der Bibliothek verwenden.
  </p>
  <p class="para">
   <strong>Standardwerte der integrierten Verbindungsbibliothek</strong>
  </p>
  <p class="para">
   Wenn der Wert von host nicht definiert oder leer ist, verwendet die
   Client-Bibliothek standardmäßig eine Unix-Socket-Verbindung zu
   <code class="literal">localhost</code>. Wenn der Socket undefiniert oder leer ist und
   eine Unix-Socket-Verbindung angefordert wird, dann wird versucht, eine
   Verbindung zum Standardsocket <code class="literal">/tmp/mysql.sock</code>
   aufzubauen.
  </p>
  <p class="para">
   Auf Windows-Systemen wird der Hostname <code class="literal">.</code> von der
   Client-Bibliothek als Versuch interpretiert, eine auf einer Windows Namend
   Pipe basierende Verbindung zu öffnen. In diesem Fall wird der
   Socket-Parameter als Name der Pipe interpretiert. Wird er nicht angegeben
   oder ist er leer, dann wird der Socket (Name der Pipe) standardmäßig auf
   <code class="literal">\\.\pipe\MySQL</code> gesetzt.
  </p>
  <p class="para">
   Wenn eine Verbindung weder basierend auf einen Unix-Domänen-Socket noch auf
   eine Windows Named Pipe aufgebaut werden soll und der Parameterwert für den
   Port nicht gesetzt ist, verwendet die Bibliothek standardmäßig den Port
   <code class="literal">3306</code>.
  </p>
  <p class="para">
   Die <a href="mysqlnd.overview.php" class="link">mysqlnd</a>-Bibliothek und die
   MySQL-Client-Bibliothek (libmysqlclient) implementieren dieselbe Logik zur
   Bestimmung der Standardwerte.
  </p>
  <p class="para">
   <strong>Optionen für die Verbindung</strong>
  </p>
  <p class="para">
   Die Verbindungsoptionen sind verfügbar, um z. B. Initialisierungsbefehle zu
   setzen, die beim Aufbau der Verbindung ausgeführt werden, oder um die
   Verwendung eines bestimmten Zeichensatzes anzugeben. Die
   Verbindungsoptionen müssen gesetzt werden, bevor eine Netzwerkverbindung
   aufgebaut wird.
  </p>
  <p class="para">
   Um eine Verbindungsoption zu setzen, muss der Verbindungsvorgang in drei
   Schritten durchgeführt werden: erstellen eines Verbindungs-Handles mit
   <span class="function"><a href="mysqli.init.php" class="function">mysqli_init()</a></span> oder
   <span class="methodname"><a href="mysqli.construct.php" class="methodname">mysqli::__construct()</a></span>, setzen der gewünschten
   Optionen mit <span class="methodname"><a href="mysqli.options.php" class="methodname">mysqli::options()</a></span> und Aufbau der
   Netzwerkverbindung mit <span class="methodname"><a href="mysqli.real-connect.php" class="methodname">mysqli::real_connect()</a></span>.
  </p>
  <p class="para">
   <strong>Pooling von Verbindungen</strong>
  </p>
  <p class="para">
   Die mysqli-Erweiterung unterstützt persistente Datenbankverbindungen, die
   eine spezielle Art von gepoolten Verbindungen sind. Standardmäßig wird jede
   Datenbankverbindung, die von einem Skript geöffnet wird, entweder explizit
   durch den Benutzer während der Laufzeit geschlossen oder am Ende des
   Skripts automatisch freigegeben. Eine persistente Verbindung wird nicht
   geschlossen. Stattdessen wird sie in einen Pool gelegt, um später
   wiederverwendet zu werden, wenn eine Verbindung zum selben Server mit
   denselben Benutzernamen, Passwort, Socket, Port und Standarddatenbank
   geöffnet wird. Die Wiederverwendung spart Verbindungs-Overhead.
  </p>
  <p class="para">
   Jeder PHP-Prozess verwendet seinen eigenen mysqli-Verbindungspool. Abhängig
   vom Einsatzmodell des Webservers kann ein PHP-Prozess eine oder mehrere
   Anfragen bedienen. Daher kann eine in einem Pool gehaltene Verbindung von
   einem oder mehreren Skripten nacheinander verwendet werden.
  </p>
  <p class="para">
   <strong>Persistente Verbindung</strong>
  </p>
  <p class="para">
   Wenn im Verbindungspool für eine bestimmte Kombination von Host,
   Benutzername, Passwort, Socket, Port und Standarddatenbank keine unbenutzte
   persistente Verbindung gefunden wird, öffnet mysqli eine neue Verbindung.
   Die Verwendung persistenter Verbindungen kann mit der PHP-Direktive
   <a href="mysqli.configuration.php#ini.mysqli.allow-persistent" class="link">mysqli.allow_persistent</a>
   aktiviert und deaktiviert werden. Die Gesamtzahl der von einem Skript
   geöffneten Verbindungen kann mit
   <a href="mysqli.configuration.php#ini.mysqli.max-links" class="link">mysqli.max_links</a> begrenzt
   werden. Die maximale Anzahl von persistenten Verbindungen pro PHP-Prozess
   kann mit
   <a href="mysqli.configuration.php#ini.mysqli.max-persistent" class="link">mysqli.max_persistent</a>
   begrenzt werden. Bitte beachten Sie, dass der Webserver viele PHP-Prozesse
   erzeugen kann.
  </p>
  <p class="para">
   Eine häufige Kritik an persistenten Verbindungen ist, dass ihr Zustand vor
   der Wiederverwendung nicht zurückgesetzt wird. Zum Beispiel werden offene
   und nicht abgeschlossene Transaktionen nicht nicht automatisch
   zurückgesetzt. Aber auch Berechtigungsänderungen, die in der Zeit zwischen
   der Aufnahme der Verbindung in den Pool und ihrer Wiederverwendung
   vorgenommen wurden, werden nicht berücksichtigt. Dies kann als
   unerwünschter Nebeneffekt angesehen werden. Andererseits kann der Name
   <code class="literal">persistent</code> als Zusage verstanden werden, dass der
   Zustand erhalten bleibt.
  </p>
  <p class="para">
   Die mysqli-Erweiterung unterstützt beide Arten einer persistenten
   Verbindung: den persistenten Zustand und den vor der Wiederverwendung
   zurückgesetzten Zustand. Die Voreinstellung ist Zurücksetzen. Bevor eine
   persistente Verbindung wiederverwendet wird, ruft die mysqli-Erweiterung
   implizit <span class="methodname"><a href="mysqli.change-user.php" class="methodname">mysqli::change_user()</a></span> auf, um den Zustand
   zurückzusetzen. Die persistente Verbindung erscheint dem Benutzer so, als
   ob sie gerade geöffnet worden wäre. Es sind keine Spuren von früheren
   Verwendungen sichtbar.
  </p>
  <p class="para">
   Der Aufruf von <span class="methodname"><a href="mysqli.change-user.php" class="methodname">mysqli::change_user()</a></span> ist eine
   aufwändige Operation. Um die beste Leistung zu erzielen, sollten Benutzer
   die Erweiterung mit dem Kompilierungsflag
   <strong><code>MYSQLI_NO_CHANGE_USER_ON_PCONNECT</code></strong> neu kompilieren.
  </p>
  <p class="para">
   Es ist dem Benutzer überlassen, zwischen sicherem Verhalten und bester
   Leistung zu wählen. Beides sind berechtigte Optimierungsziele. Um die
   Benutzung zu erleichtern, wurde das sichere Verhalten auf Kosten der
   maximalen Leistung als Standard festgelegt.
  </p>
  <p class="para">
   <strong>Siehe auch</strong>
  </p>
  <p class="para">
   <ul class="simplelist">
    <li><span class="methodname"><a href="mysqli.construct.php" class="methodname">mysqli::__construct()</a></span></li>
    <li><span class="function"><a href="mysqli.init.php" class="function">mysqli_init()</a></span></li>
    <li><span class="methodname"><a href="mysqli.options.php" class="methodname">mysqli::options()</a></span></li>
    <li><span class="methodname"><a href="mysqli.real-connect.php" class="methodname">mysqli::real_connect()</a></span></li>
    <li><span class="methodname"><a href="mysqli.change-user.php" class="methodname">mysqli::change_user()</a></span></li>
    <li><a href="mysqli.get-host-info.php" class="link">$mysqli::host_info</a></li>
    <li><a href="mysqli.configuration.php" class="link">MySQLi-Konfigurationsoptionen</a></li>
    <li><a href="features.persistent-connections.php" class="link">Persistente Datenbankverbindungen</a></li>
   </ul>
  </p>
 </div><?php manual_footer($setup); ?>