mirror of
https://github.com/php/doc-de.git
synced 2026-03-23 23:02:13 +01:00
168 lines
6.3 KiB
XML
168 lines
6.3 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: d861a1bcea24f05e52e4938c1ecdf9d70326d7aa Maintainer: fa Status: ready -->
|
|
|
|
<chapter xml:id="pdo.connections" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Verbindungen und Verbindungsmanagement</title>
|
|
<para>
|
|
Verbindungen werden durch das Erstellen von Instanzen der PDO-Basisklasse
|
|
erzeugt. Es ist unerheblich, welchen Treiber Sie benutzen wollen. Sie
|
|
benutzen immer den PDO-Klassennamen. Der Konstruktor erwartet Parameter
|
|
zur Angabe der Datenbankquelle (auch bekannt als DSN) und optional für
|
|
Benutzername und Passwort (falls vorhanden).
|
|
</para>
|
|
<para>
|
|
<example><title>Mit MySQL verbinden</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Wenn es Fehler bei der Verbindung gibt, wird eine Ausnahme vom Typ
|
|
<literal>PDOException</literal> geworfen. Sie können die Ausnahme abfangen,
|
|
wenn Sie sich selbst um die Fehlerbedingung kümmern wollen, oder Sie
|
|
können es einer globalen Routine zur Ausnahmebehandlung überlassen, die
|
|
Sie mit <function>set_exception_handler</function> konfigurieren.
|
|
</para>
|
|
<para>
|
|
<example><title>Verbindungsfehler behandeln</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
try {
|
|
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
|
|
} catch (PDOException $e) {
|
|
// z.B. nach einem Timeout versuchen, die Verbindung erneut aufzubauen
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
Wie jede andere <link linkend="language.exceptions">Exception</link> kann
|
|
auch <classname>PDOException</classname> entweder explizit über eine
|
|
&catch;-Anweisung oder implizit über
|
|
<function>set_exception_handler</function> abgefangen werden. Andernfalls
|
|
ist das Standardverhalten, eine nicht abgefangene Exception in einen
|
|
<constant>E_FATAL_ERROR</constant> umzuwandeln. Der fatale Fehler enthält
|
|
einen Backtrace, der Verbindungsdetails preisgeben könnte. Deshalb sollte
|
|
die &php.ini;-Option
|
|
<link linkend="ini.display-errors"><literal>display_errors</literal></link>
|
|
auf einem Produktionsserver auf <literal>0</literal> gesetzt werden.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Bei erfolgreicher Verbindung zur Datenbank wird eine Instanz der
|
|
PDO-Klasse an Ihr Skript zurückgegeben. Die Verbindung bleibt während der
|
|
Lebensdauer des PDO-Objekts aktiv. Um die Verbindung zu beenden, müssen
|
|
Sie das Objekt löschen, indem Sie sicherstellen, dass alle Referenzen
|
|
darauf gelöscht werden - das erreichen Sie, indem Sie der Variable, die
|
|
das Objekt beinhaltet, &null; zuweisen. Wenn Sie das nicht explizit tun,
|
|
schließt PHP die Verbindung automatisch, wenn Ihr Skript endet.
|
|
</para>
|
|
<note>
|
|
<simpara>
|
|
Gibt es noch weitere Referenzen auf dieses PDO-Exemplar (wie etwa von einem
|
|
PDOStatement-Exemplar, oder von anderen Variablen, die dasselbe PDO-Exemplar
|
|
referenzieren), müssen diese ebenfalls entfernt werden (zum Beispiel durch
|
|
die Zuweisung von &null; an die Variable, die das PDOStatement referenziert).
|
|
</simpara>
|
|
</note>
|
|
<para>
|
|
<example><title>Eine Verbindung schließen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
|
|
// hier die Verbindung nutzen
|
|
$sth = $dbh->query('SELECT * FROM foo');
|
|
|
|
// und nachdem das erledigt ist, wird sie geschlossen
|
|
$sth = null;
|
|
$dbh = null;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Viele Webanwendungen profitieren von persistenten Verbindungen zum
|
|
Datenbankserver. Persistente Verbindungen werden nicht am Ende des Skripts
|
|
geschlossen, sondern werden gecacht und wiederverwendet, wenn ein anderes
|
|
Skript eine Verbindung mit denselben Daten anfordert. Der Cache an
|
|
persistenten Verbindungen erlaubt Ihnen, den Overhead zu vermeiden, wenn
|
|
jedesmal eine neue Verbindung geöffnet wird, sobald ein Skript mit der
|
|
Datenbank kommunizieren muss, was sich in einer schnelleren Anwendung
|
|
widerspiegelt.
|
|
</para>
|
|
<para>
|
|
<example><title>Persistente Verbindungen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
|
|
PDO::ATTR_PERSISTENT => true
|
|
));
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Der Wert der <constant>PDO::ATTR_PERSISTENT</constant> Option wird nach &boolean;
|
|
kovertiert (aktiviere/deaktiviere persistente Verbindungen), es sei denn es ist ein
|
|
nicht-numerischer &string;; in diesem Fall ermöglicht es die Verwendung mehrerer
|
|
persistenter Verbindungspools. Das ist nützlich, wenn unterschiedliche Verbindungen
|
|
inkompatible Einstellungen verwenden, beispielsweise unterschiedliche Werte von
|
|
<constant>PDO::MYSQL_ATTR_USE_BUFFERED_QUERY</constant>.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Wenn Sie persistente Verbindungen verwenden wollen, müssen Sie
|
|
<constant>PDO::ATTR_PERSISTENT</constant> im Array von Treiberoptionen
|
|
setzen, das an den PDO-Konstruktor übergeben wird. Wenn Sie dieses Attribut
|
|
mittels <methodname>PDO::setAttribute</methodname> nach der Instanziierung des
|
|
Objekts setzen, verwendet der Treiber keine persistenten Verbindungen.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Wenn Sie den PDO-ODBC-Treiber benutzen und Ihre ODBC-Bibliotheken ODBC Connection
|
|
Pooling unterstützen (unixODBC und Windows etwa, es könnte auch andere geben), dann
|
|
wird empfohlen, dass sie keine persistenten PDO-Verbindungen benutzen, sondern das
|
|
Cachen der Verbindungen der ODBC Connection Pooling-Schicht überlassen. Der ODBC
|
|
Connection Pool wird mit anderen Modulen im Prozess geteilt. Wenn PDO also
|
|
angewiesen wird die Verbindung zu cachen, wird diese Verbindung nie dem ODBC
|
|
Connection Pool zurückgegeben, was darin resultiert, dass zusätzliche Verbindungen
|
|
aufgebaut werden, um jene anderen Module zu bedienen.
|
|
</para>
|
|
</note>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|