16.17. Meine Datenbankabfrage funktioniert nichtAntwort von Clemens KoppensteinerFehlermeldungenAls 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örterBestimmte 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 NewsgroupsFalls 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.* |
||
| 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 | ||