Signatur
Beschreibung
mysql_query() sendet eine SQL-Abfrage an den MySQL-Server. Bei lesenden Abfragen (SELECT, SHOW, DESCRIBE, EXPLAIN) wird bei Erfolg eine Ergebnis-Ressource zurückgegeben, die anschließend mit Funktionen wie mysql_fetch_assoc(), mysql_fetch_row() oder mysql_num_rows() ausgewertet werden kann. Bei schreibenden Abfragen (INSERT, UPDATE, DELETE usw.) gibt die Funktion bei Erfolg true zurück.
Wichtiger Hinweis zur Veraltung: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als deprecated (veraltet) markiert und in PHP 7.0.0 vollständig entfernt. Für neuen Code sollten ausschließlich mysqli_*-Funktionen oder die PDO-Erweiterung verwendet werden, da diese aktiv gepflegt werden und moderne Sicherheitsmechanismen unterstützen.
Wird kein $link_identifier angegeben, wird automatisch die zuletzt mit mysql_connect() geöffnete Verbindung verwendet. Gibt es keine offene Verbindung, versucht PHP, eine Verbindung mit Standardparametern aufzubauen. Im Fehlerfall gibt die Funktion false zurück; die Fehlermeldung kann dann über mysql_error() abgerufen werden.
Sicherheit: Benutzereingaben dürfen niemals ungeprüft in SQL-Abfragen eingebettet werden. Um SQL-Injection zu verhindern, müssen Eingaben zwingend mit mysql_real_escape_string() maskiert werden — besser noch wechselt man zu PDO oder mysqli mit Prepared Statements, da diese das Problem strukturell lösen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $query Pflicht | string | Die auszuführende SQL-Abfrage. Der abschließende Strichpunkt ; soll nicht Teil des Strings sein. Die Abfrage wird an den Server gesendet, der mit $link_identifier verknüpft ist. |
|
| $link_identifier | resource | null | Eine MySQL-Verbindungsressource, die von mysql_connect() oder mysql_pconnect() zurückgegeben wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet. |
Rückgabewert
- Bei
SELECT,SHOW,DESCRIBEundEXPLAIN: eineresourcebei Erfolg oderfalsebei einem Fehler. - Bei
INSERT,UPDATE,DELETE,DROPusw.:truebei Erfolg oderfalsebei einem Fehler.
Beispiele
Einfache SELECT-Abfrage mit Ergebnisausgabe
<?php
// Verbindung aufbauen (nur für Beispielzwecke — mysql_* nicht mehr verwenden!)
$link = mysql_connect('localhost', 'db_user', 'db_pass');
mysql_select_db('meine_datenbank', $link);
$result = mysql_query('SELECT id, name, email FROM benutzer WHERE aktiv = 1', $link);
if ($result === false) {
die('Datenbankfehler: ' . mysql_error($link));
}
while ($row = mysql_fetch_assoc($result)) {
echo 'ID: ' . $row['id'] . ', Name: ' . $row['name'] . PHP_EOL;
}
mysql_free_result($result);
mysql_close($link);
INSERT mit Eingabe-Maskierung (SQL-Injection-Schutz)
<?php
$link = mysql_connect('localhost', 'db_user', 'db_pass');
mysql_select_db('meine_datenbank', $link);
// Benutzereingaben IMMER maskieren!
$name = mysql_real_escape_string($_POST['name'], $link);
$email = mysql_real_escape_string($_POST['email'], $link);
$sql = "INSERT INTO benutzer (name, email) VALUES ('$name', '$email')";
if (mysql_query($sql, $link)) {
$neueId = mysql_insert_id($link);
echo 'Neuer Eintrag mit ID: ' . $neueId;
} else {
echo 'Fehler: ' . mysql_error($link);
}
mysql_close($link);
// Wichtig · Fallstricke
Deprecation / Entfernung: mysql_query() und alle mysql_*-Funktionen wurden in PHP 5.5.0 als veraltet markiert (E_DEPRECATED-Warnung) und in PHP 7.0.0 vollständig entfernt. Code, der diese Erweiterung nutzt, läuft auf PHP 7+ nicht mehr. Migration auf mysqli oder PDO ist zwingend erforderlich.
SQL-Injection: Benutzereingaben dürfen niemals direkt in den Abfrage-String eingebettet werden. mysql_real_escape_string() bietet einen gewissen Schutz, ist aber fehleranfällig, wenn die Zeichenkodierung nicht korrekt gesetzt ist. Prepared Statements mit mysqli oder PDO sind die zuverlässigere Alternative.
Mehrfache Abfragen: Im Gegensatz zu mysqli_multi_query() unterstützt mysql_query() nur eine einzelne Abfrage pro Aufruf — das Einschleusen von ; gefolgt von weiteren Befehlen ist daher etwas schwieriger, aber nicht unmöglich durch andere Angriffsvektoren.