Signatur
Beschreibung
mysql_list_processes() fragt den MySQL-Server nach allen laufenden Prozessen ab und gibt das Ergebnis als Ressource zurück, die mit den üblichen mysql_fetch_*-Funktionen ausgewertet werden kann. Die Funktion entspricht dem SQL-Befehl SHOW PROCESSLIST.
Die zurückgegebene Ergebnismenge enthält typischerweise die Spalten Id, User, Host, db, Command, Time, State und Info. Mit diesen Informationen lassen sich lang laufende oder blockierende Datenbankprozesse erkennen und bei Bedarf mit mysql_kill() beenden.
Die Funktion ist nützlich für Datenbankadministratoren und Monitoring-Skripte, die den Zustand eines MySQL-Servers überwachen möchten. Zu beachten ist, dass normale Datenbankbenutzer in der Regel nur ihre eigenen Prozesse sehen, während Benutzer mit dem PROCESS-Privileg alle Prozesse einsehen können.
Wichtig: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli oder PDO_MySQL verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link_identifier | resource | NULL | Die MySQL-Verbindungsressource, die mit mysql_connect() geöffnet wurde. Wird kein Wert übergeben, wird die zuletzt geöffnete Verbindung verwendet. Ist keine Verbindung offen, wird automatisch versucht, eine Verbindung wie mit mysql_connect() herzustellen. |
Rückgabewert
mysql_fetch_array(), mysql_fetch_assoc() oder anderen Fetch-Funktionen ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Alle laufenden MySQL-Prozesse ausgeben
<?php
$link = mysql_connect('localhost', 'root', 'geheimes_passwort');
if (!$link) {
die('Verbindung fehlgeschlagen: ' . mysql_error());
}
$result = mysql_list_processes($link);
if (!$result) {
die('Prozesse konnten nicht abgerufen werden: ' . mysql_error());
}
echo '<table border="1">';
echo '<tr><th>Id</th><th>User</th><th>Host</th><th>DB</th><th>Command</th><th>Time</th><th>State</th><th>Info</th></tr>';
while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($row['Id']) . '</td>';
echo '<td>' . htmlspecialchars($row['User']) . '</td>';
echo '<td>' . htmlspecialchars($row['Host']) . '</td>';
echo '<td>' . htmlspecialchars((string)$row['db']) . '</td>';
echo '<td>' . htmlspecialchars($row['Command']) . '</td>';
echo '<td>' . htmlspecialchars($row['Time']) . '</td>';
echo '<td>' . htmlspecialchars((string)$row['State']) . '</td>';
echo '<td>' . htmlspecialchars((string)$row['Info']) . '</td>';
echo '</tr>';
}
echo '</table>';
mysql_free_result($result);
mysql_close($link);
Äquivalent mit mysqli (moderner Ersatz)
<?php
// Moderner Ersatz mit mysqli statt veralteter mysql_*-Erweiterung
$mysqli = new mysqli('localhost', 'root', 'geheimes_passwort');
if ($mysqli->connect_error) {
die('Verbindung fehlgeschlagen: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SHOW PROCESSLIST');
if (!$result) {
die('Abfrage fehlgeschlagen: ' . $mysqli->error);
}
while ($row = $result->fetch_assoc()) {
printf(
"Id: %d | User: %s | Command: %s | Zeit: %d Sek.\n",
$row['Id'],
$row['User'],
$row['Command'],
$row['Time']
);
}
$result->free();
$mysqli->close();
// Wichtig · Fallstricke
Deprecation-Hinweis: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert, erzeugt seit PHP 5.6 Warnungen und wurde in PHP 7.0.0 vollständig entfernt. Sie darf in modernen Projekten nicht mehr verwendet werden. Verwende stattdessen mysqli oder PDO mit dem entsprechenden SHOW PROCESSLIST-SQL-Befehl.
Berechtigungen: Ohne das PROCESS-Privileg sieht der Datenbankbenutzer nur seine eigenen Verbindungsprozesse. Mit dem SUPER- oder PROCESS-Privileg werden alle Prozesse angezeigt.
Sicherheit: Ausgaben aus der Prozessliste (z. B. der Info-Spalte mit dem aktuellen SQL-Statement) können sensible Daten wie Passwörter oder persönliche Informationen enthalten. Die Ausgabe sollte niemals ungefiltert an den Browser weitergegeben werden — immer htmlspecialchars() verwenden.