Einführung
PDO_MYSQL ist ein Treiber, der die
PHP Data Objects (PDO)-Schnittstelle
implementiert, um von PHP aus auf MySQL Datenbanken zugreifen zu können.
PDO_MYSQL verwendet standardmäßig emulierte vorbereitete Anweisungen.
MySQL 8
Bei PHP-Versionen vor PHP 7.1.16 oder der 7.2-Serie vor 7.2.4 muss das
Standard-Passwort-Plugin des MySQL 8-Servers auf
mysql_native_password gesetzt werden, da sonst
Fehler angezeigt werden wie The server requested authentication
method unknown to the client [caching_sha2_password], auch
wenn caching_sha2_password nicht verwendet wird.
Das liegt daran, dass MySQL 8 standardmäßig caching_sha2_password
verwendet und dieses Plugin von den älteren PHP- (mysqlnd) Versionen
nicht erkannt wird. Stattdessen muss die Voreinstellung durch den
Eintrag
default_authentication_plugin=mysql_native_password
in
der Datei my.cnf geändert werden. Das Plugin
caching_sha2_password wird seit PHP 7.4.4
vollständig unterstützt. In älteren Versionen wird es von der Erweiterung
mysql_xdevapi unterstützt.
Warnung
Vorsicht ist geboten: Einige MySQL-Tabellentypen (Speicher-Engines)
unterstützen keine Transaktionen. Wenn transaktionaler Datenbankcode für
einen Tabellentyp geschrieben wird, der keine Transaktionen unterstützt,
verhält sich MySQL so, als sei eine Transaktion erfolgreich initiiert
worden. Darüber hinaus werden alle ausgelösten DDL-Abfragen implizit
alle anstehenden Transaktionen festschreiben.
Hinweis:
Der MySQL-Treiber unterstützt die Konstante
PDO::PARAM_INPUT_OUTPUT
über die Methode
PDOStatement::bindParam() nicht korrekt; solche
Parameter können zwar verwendet werden, werden aber nicht aktualisiert
(d. h. die eigentliche Ausgabe wird ignoriert).
Installation
In allen gängigen Unix-Distributionen sind Binärversionen von PHP enthalten,
die installiert werden können. Obwohl diese Binärversionen in der Regel mit
Unterstützung für die MySQL-Erweiterungen gebaut werden, müssen die
Erweiterungsbibliotheken selbst möglicherweise über ein zusätzliches Paket
installiert werden. Ob dies der Fall ist, erfahren Sie in der Paketverwaltung
Paketverwaltung der von Ihnen gewählten Distribution.
Unter Ubuntu zum Beispiel installiert das Paket php5-mysql
die PHP-Erweiterungen ext/mysql, ext/mysqli und PDO_MYSQL. Auch unter CentOS
installiert das Paket php-mysql
diese drei
PHP-Erweiterungen.
Alternativ können Sie diese Erweiterung auch selbst kompilieren. Wenn Sie
PHP aus dem Quellcode kompilieren, können Sie die MySQL-Erweiterungen
angeben, die Sie verwenden möchten, und auch die Client-Bibliothek für jede
Erweiterung auswählen.
Um die Erweiterung PDO MySQL zu installieren, verwenden Sie beim Kompilieren
--with-pdo-mysql[=DIR], wobei das
optionale [=DIR]
die MySQL-Basisbibliothek angibt. Die
Standardbibliothek ist Mysqlnd. Für
Details über die Auswahl einer Bibliothek, siehe
Auswahl einer MySQL-Bibliothek.
Mit dem optionalen --with-mysql-sock[=DIR]
kann der Speicherort des Unix-Sockets von MySQL für alle MySQL Erweiterungen,
einschließlich PDO_MYSQL, festgelegt werden. Wenn nichts angegeben ist,
werden die standardmäßigen Speicherorte durchsucht.
Optional kann --with-zlib-dir[=DIR]
verwendet werden, um den Pfad zum libz-Installationspräfix festzulegen.
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
Die SSL-Unterstützung wird mit den entsprechenden
PDO_MySQL-Konstanten aktiviert,
was dem Aufruf der
» MySQL C API-Funktion mysql_ssl_set()
entspricht. Darüber hinaus kann SSL nicht mittels
PDO::setAttribute aktiviert werden, da die Verbindung
bereits existiert. Siehe auch die MySQL-Dokumentation über den
» Aufbau einer Verbindung zu MySQL mit SSL.
Vordefinierte Konstanten
Die folgenden Konstanten werden von
diesem Treiber definiert und sind nur verfügbar, wenn die Erweiterung entweder
in PHP einkompiliert oder dynamisch zur Laufzeit geladen wurde. Darüber hinaus
sind diese Konstanten treiberspezifisch und sollten nur mit diesem Treiber
benutzt werden. Treiberspezifische Attribute mit einem anderen Treiber zu
nutzen, kann zu unerwarteten Ergebnissen führen. Wenn der Code mit
verschiedenen Treibern funktioniert, kann
PDO::getAttribute() verwendet werden, um mit
PDO::ATTR_DRIVER_NAME
den aktuellen Treiber zu
ermitteln.
-
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(bool)
-
In der Voreinstellung werden alle Anweisungen im
gepufferten Modus
ausgeführt. Wenn dieses Attribut bei einem
PDO-Objekt auf
false
gesetzt ist, verwendet der
MySQL-Treiber den ungepufferten Modus.
Beispiel #1 Den ungepufferten Modus von MySQL aktivieren
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$unbufferedResult = $pdo->query("SELECT Name FROM City");
foreach ($unbufferedResult as $row) {
echo $row['Name'] . PHP_EOL;
}
?>
-
PDO::MYSQL_ATTR_LOCAL_INFILE
(int)
-
Aktiviert Load LOCAL INFILE
.
Es ist zu beachten, dass diese Konstante nur im Array
driver_options
verwendet werden kann, wenn ein
neues Datenbank-Handle erstellt wird.
-
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(string)
-
Ermöglicht es, das Laden von LOCAL DATA auf Dateien zu beschränken, die
sich im angegebenen Verzeichnis befinden. Verfügbar ab PHP 8.1.0.
Es ist zu beachten, dass diese Konstante nur im Array
driver_options
verwendet werden kann, wenn ein
neues Datenbank-Handle erstellt wird.
-
PDO::MYSQL_ATTR_INIT_COMMAND
(string)
-
Der Befehl, der ausgeführt werden soll, wenn eine Verbindung zum
MySQL-Server aufgebaut wird. Wird beim erneuten Verbindungsaufbau
automatisch wieder ausgeführt.
Es ist zu beachten, dass diese Konstante nur im Array
driver_options
verwendet werden kann, wenn ein
neues Datenbank-Handle erstellt wird.
-
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
(int)
-
Die Optionen aus der genannten Optionsdatei lesen, statt aus
my.cnf. Diese Option ist nicht verfügbar, wenn
mysqlnd verwendet wird, weil mysqlnd die mysql-Konfigurationsdateien
nicht liest.
-
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
(int)
-
Die Optionen der genannten Gruppe aus my.cnf oder
der mit MYSQL_READ_DEFAULT_FILE
angegebenen Datei
lesen. Diese Option ist nicht verfügbar, wenn mysqlnd verwendet wird,
weil mysqlnd die mysql-Konfigurationsdateien nicht liest.
-
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE
(int)
-
Die maximale Puffergröße. Der Standardwert ist 1 MiB. Diese Konstante
wird nicht unterstützt, wenn gegen mysqlnd kompiliert wird.
-
PDO::MYSQL_ATTR_DIRECT_QUERY
(int)
-
Abfragen direkt ausführen, keine vorbereiteten Anweisungen verwenden.
-
PDO::MYSQL_ATTR_FOUND_ROWS
(int)
-
Die Anzahl der gefundenen (übereinstimmenden) Zeilen zurückgeben, nicht
die Anzahl der geänderten Zeilen.
-
PDO::MYSQL_ATTR_IGNORE_SPACE
(int)
-
Leerzeichen nach Funktionsnamen zulassen; macht alle Funktionsnamen zu
reservierten Wörtern.
-
PDO::MYSQL_ATTR_COMPRESS
(int)
-
Aktiviert die Komprimierung der Netzwerkkommunikation.
-
PDO::MYSQL_ATTR_SSL_CA
(int)
-
Der Pfad zur Datei der SSL-Zertifizierungsstelle.
-
PDO::MYSQL_ATTR_SSL_CAPATH
(int)
-
Der Pfad zum Verzeichnis, das die im PEM-Format
gespeicherten vertrauenswürdigen SSL-Zertifikate der
Zertifizierungsstelle (CA) enthält.
-
PDO::MYSQL_ATTR_SSL_CERT
(int)
-
Der Pfad zum SSL-Zertifikat.
-
PDO::MYSQL_ATTR_SSL_CIPHER
(int)
-
Eine Liste von einer oder mehreren zulässigen Chiffren, die für die
SSL-Verschlüsselung zu verwenden sind, in einem Format, das von OpenSSL
verstanden wird, z. B. DHE-RSA-AES256-SHA:AES128-SHA
-
PDO::MYSQL_ATTR_SSL_KEY
(int)
-
Der Pfad zur Datei mit dem SSL-Schlüssel.
-
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
(int)
-
Mit dieser Option kann die Überprüfung des SSL-Zertifikats des Servers
deaktiviert werden; sie ist nur in Verbindung mit mysqlnd verfügbar.
Dies existiert seit PHP 7.0.18 und PHP 7.1.4.
-
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(int)
-
Wenn auf false
gesetzt, wird die Ausführung von Mehrfachabfragen sowohl
bei PDO::prepare() als auch bei
PDO::query() deaktiviert.
Es ist zu beachten, dass diese Konstante nur im Array
driver_options
verwendet werden kann, wenn ein
neues Datenbank-Handle erstellt wird.
Laufzeit-Konfiguration
Das Verhalten dieser Funktionen wird
durch Einstellungen in der php.ini beeinflusst.
Weitere Details und die Definitionen der
INI_*-Konstanten sind unter
Wo Konfigurationseinstellungen gesetzt werden können zu finden.
Hier eine kurze Erklärung der
Konfigurationsoptionen:
-
pdo_mysql.default_socket
string
-
Setzt einen Unix-Domain-Socket. Wenn während der Ausführung von
configure ein Domain-Socket gefunden wird, wird dieser Wert bereits beim
Kompilieren gesetzt. Diese INI-Einstellung gilt nur unter Unix.
-
pdo_mysql.debug
bool
-
Aktiviert das Debugging für PDO_MYSQL. Diese Einstellung ist nur
verfügbar, wenn PDO_MYSQL mit mysqlnd und im PDO-Debugmodus kompiliert
wurde.