de.comp.lang.php.* FAQ

16.17. Meine Datenbankabfrage funktioniert nicht

Keywords: SQL | Abfrage | Datenbank | Fehler | Error

Antwort von Clemens Koppensteiner

Fehlermeldungen

Als erster Anhaltspunkt sind die Fehlermeldungen der verwendeten Datenbank gut geeignet. Für viele Datenbanken bietet PHP hierfür eigene Funktionen. Dies sind zum Beispiel mysql_error() , pg_last_error() , ora_error() , odbc_errormsg() und sybase_get_last_message() .

Hier ein Beispiel für MySQL

function mysql_errorhandler($problem, $query = "")
{
  echo "<font color='#FF0000'><b>Datenbankfehler:</b></font><br />\n";
  echo "Problem: $problem <br />\n";
  if($query != "")
  {
    echo "Query: $query <br />\n";
  }
  echo "MySQL: " . mysql_errno() . " - " . mysql_error() . "<br /><br />\n";
}

// Verbindung zum Datenbankserver herstellen
if(!$db = @mysql_connect("host", "user", "password"))
{
  mysql_errorhandler("Verbindungsaufbau gescheitert.");
}

// Datenbank auswählen
if(!@mysql_select_db("database"))
{
  mysql_errorhandler("Auswahl der Datenbank gescheitert.");
}

// Beispiel für ein SQL-Statement
$query = "SELECT * FROM table WHERE x = '$x'";
$result = @mysql_query($query);

if(!$result)
{
  mysql_errorhandler("Datenbankabfrage gescheitert", $query);
}

Klassen zur Datenbankabstraktion (z.B. PEAR::DB) können das Fehler-Handling wesentlich vereinfachen.

Reservierte Wörter

Bestimmte Wörter sollten nicht als Namen von Feldern vorkommen, da sie andere Bedeutungen haben. Diese "Reserved Words", oder auch "Keywords", sollten im Handbuch der verwendeten Datenbank aufgelistet sein.

Bei MySQL und PostgreSQL kann man das Problem umgehen, indem man den Feldnamen in Anführungszeichen einschließt:

SELECT * FROM users WHERE 'group' = 2

Zuständige Newsgroups

Falls das alles nichts hilft, frage in den zuständigen Newsgroups nach. Das sind unter anderem de.comp.datenbanken.misc, de.comp.datenbanken.mysql und die englischsprachigen Gruppen comp.databases.*

Valid HTML 4.01! Valid CSS!

16.17. Meine Datenbankabfrage funktioniert nicht
http://www.php-faq.de/q/q-sql-fehlerbehandlung.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team