# MySQL PDO-Treiber (PDO_MYSQL)

## 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::ATTR_SSL_*`-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` (int)
  Alias von `Pdo\Mysql::ATTR_USE_BUFFERED_QUERY`
`PDO::MYSQL_ATTR_LOCAL_INFILE` (int)
  Alias von `Pdo\Mysql::ATTR_LOCAL_INFILE`
`PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY` (int)
  Alias von `Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY`. Verfügbar seit PHP 8.1.0.
`PDO::MYSQL_ATTR_INIT_COMMAND` (int)
  Alias von `Pdo\Mysql::ATTR_INIT_COMMAND`
`PDO::MYSQL_ATTR_READ_DEFAULT_FILE` (int)
  Alias von `Pdo\Mysql::ATTR_READ_DEFAULT_FILE`
`PDO::MYSQL_ATTR_READ_DEFAULT_GROUP` (int)
  Alias von `Pdo\Mysql::ATTR_READ_DEFAULT_GROUP`
`PDO::MYSQL_ATTR_MAX_BUFFER_SIZE` (int)
  Alias von `Pdo\Mysql::ATTR_MAX_BUFFER_SIZE`
`PDO::MYSQL_ATTR_DIRECT_QUERY` (int)
  Alias von `PDO::ATTR_EMULATE_PREPARES`
`PDO::MYSQL_ATTR_FOUND_ROWS` (int)
  Alias von `Pdo\Mysql::ATTR_FOUND_ROWS`
`PDO::MYSQL_ATTR_IGNORE_SPACE` (int)
  Alias von `Pdo\Mysql::ATTR_IGNORE_SPACE`
`PDO::MYSQL_ATTR_COMPRESS` (int)
  Alias von `Pdo\Mysql::ATTR_COMPRESS`
`PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY` (int)
  Alias von `Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY`
`PDO::MYSQL_ATTR_SSL_CA` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_CA`
`PDO::MYSQL_ATTR_SSL_CAPATH` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_CAPATH`
`PDO::MYSQL_ATTR_SSL_CERT` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_CERT`
`PDO::MYSQL_ATTR_SSL_CIPHER` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_CIPHER`
`PDO::MYSQL_ATTR_SSL_KEY` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_KEY`
`PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT` (int)
  Alias von `Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT` Verfügbar seit PHP 7.0.18 und PHP 7.1.4.
`PDO::MYSQL_ATTR_MULTI_STATEMENTS` (int)
  Alias von `Pdo\Mysql::ATTR_MULTI_STATEMENTS`

## Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

PDO_MYSQL-Konfigurationsoptionen
Name | Standard | Veränderbar
--- | --- | ---
pdo_mysql.default_socket | "/tmp/mysql.sock" | `INI_SYSTEM`
pdo_mysql.debug | NULL | `INI_SYSTEM`

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.

## Inhaltsverzeichnis

- PDO_MYSQL DSN — Verbinden mit MySQL-Datenbanken

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open