Signatur
Beschreibung
mysql_connect() stellt eine Verbindung zu einem MySQL-Datenbankserver her und gibt eine Verbindungsressource zurück, die für nachfolgende MySQL-Funktionen verwendet werden kann. Die Funktion gehört zur veralteten ext/mysql-Erweiterung, die in PHP 5.5 als veraltet markiert und in PHP 7.0 vollständig entfernt wurde. Für neue Projekte sollte stattdessen mysqli_connect() oder die PDO-Klasse verwendet werden.
Wird dieselbe Verbindung (gleicher Server, Benutzername und Passwort) erneut angefordert, ohne dass $new_link auf true gesetzt ist, gibt die Funktion die bereits vorhandene Verbindungsressource zurück, anstatt eine neue Verbindung zu öffnen. Dieses Verhalten kann mit dem Parameter $new_link übersteuert werden.
Über den Parameter $client_flags können verschiedene Verbindungsoptionen übergeben werden, etwa MYSQL_CLIENT_SSL für eine SSL-verschlüsselte Verbindung, MYSQL_CLIENT_COMPRESS für komprimierte Übertragung oder MYSQL_CLIENT_IGNORE_SPACE, um Leerzeichen nach Funktionsnamen zu ignorieren.
Da die gesamte ext/mysql-Erweiterung in PHP 7.0 entfernt wurde, kann dieser Code auf modernen PHP-Versionen nicht mehr ausgeführt werden. Bestehende Anwendungen, die noch PHP 5.x einsetzen, sollten dringend auf mysqli oder PDO_MySQL migriert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $server | string | localhost:3306 | Hostname des MySQL-Servers, optional gefolgt von einem Doppelpunkt und der Portnummer (z. B. "db.example.com:3307") oder dem Pfad zu einem lokalen Socket (z. B. ":/var/run/mysql/mysql.sock"). |
| $username | string | MySQL-Benutzername für die Anmeldung. Standardmäßig wird der Name des Prozess-Eigentümers des PHP-Prozesses verwendet. | |
| $password | string | Passwort des angegebenen MySQL-Benutzers. Standardmäßig wird ein leeres Passwort verwendet. | |
| $new_link | bool | false | Wird dieser Parameter auf true gesetzt, wird bei einem erneuten Aufruf mit denselben Verbindungsparametern eine neue Verbindung geöffnet, anstatt die bereits vorhandene zurückzugeben. |
| $client_flags | int | 0 | Kombination aus Verbindungskonstanten wie MYSQL_CLIENT_SSL, MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE oder MYSQL_CLIENT_INTERACTIVE, die das Verbindungsverhalten steuern. |
Rückgabewert
false zurückgegeben, und es wird ein Fehler der Stufe E_WARNING ausgelöst.Beispiele
Einfache Datenbankverbindung herstellen (PHP 5.x)
<?php
// Verbindung zum MySQL-Server herstellen
$verbindung = mysql_connect('localhost', 'datenbankbenutzer', 'geheimesPasswort');
if (!$verbindung) {
die('Verbindung fehlgeschlagen: ' . mysql_error());
}
echo 'Verbindung erfolgreich hergestellt.';
// Datenbank auswählen
mysql_select_db('meine_datenbank', $verbindung);
// Einfache Abfrage ausführen
$ergebnis = mysql_query('SELECT id, name FROM benutzer LIMIT 5', $verbindung);
while ($zeile = mysql_fetch_assoc($ergebnis)) {
echo $zeile['id'] . ': ' . htmlspecialchars($zeile['name']) . PHP_EOL;
}
// Verbindung schließen
mysql_close($verbindung);
Migration zu mysqli_connect (empfohlen)
<?php
// VERALTET — nicht mehr verwenden:
// $verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
// MODERN — mit MySQLi (prozedurale API):
$verbindung = mysqli_connect('localhost', 'benutzer', 'passwort', 'meine_datenbank');
if (!$verbindung) {
die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}
echo 'Verbindung mit MySQLi erfolgreich.' . PHP_EOL;
// Sicher mit Prepared Statements:
$stmt = mysqli_prepare($verbindung, 'SELECT id, name FROM benutzer WHERE id = ?');
mysqli_stmt_bind_param($stmt, 'i', $userId);
$userId = 1;
mysqli_stmt_execute($stmt);
$ergebnis = mysqli_stmt_get_result($stmt);
$zeile = mysqli_fetch_assoc($ergebnis);
echo $zeile['id'] . ': ' . htmlspecialchars($zeile['name']) . PHP_EOL;
mysqli_close($verbindung);
// Wichtig · Fallstricke
Deprecation und Entfernung: Die gesamte ext/mysql-Erweiterung inklusive mysql_connect() wurde in PHP 5.5.0 als veraltet markiert (E_DEPRECATED-Warnung) und in PHP 7.0.0 vollständig entfernt. Auf PHP-7+-Systemen führt die Verwendung dieser Funktion zu einem fatalen Fehler.
Sicherheit — SQL-Injection: Die alte ext/mysql-Erweiterung bietet keine native Unterstützung für Prepared Statements. Das manuelle Escaping mit mysql_real_escape_string() ist fehleranfällig. Moderne Alternativen (mysqli, PDO) mit Prepared Statements bieten deutlich besseren Schutz vor SQL-Injection.
Passwort-Sicherheit: Zugangsdaten sollten niemals im Quellcode hart kodiert werden. Verwende Konfigurationsdateien außerhalb des Webroot-Verzeichnisses oder Umgebungsvariablen.
Migration: Für die Migration zu mysqli oder PDO stehen offizielle PHP-Migrationsleitfäden zur Verfügung. Die APIs sind ähnlich, aber nicht identisch — insbesondere bei Prepared Statements und Fehlerbehandlung gibt es wichtige Unterschiede.