aktuelle.kurse/m133/4_Modulinhalte_und_Uebungen/01-Grundlagen/03-PHP-einfach/einf_mysql_error_handling.php.htm
Harald G. Mueller cdff097ef7 muh
2022-03-17 11:19:26 +01:00

274 lines
12 KiB
HTML

<html>
<head>
<title>PHP-Einfach.de - MySQL Einf&uuml;hrung - Verbindung beenden</title>
<meta name="Author" content="Andavos">
<meta name="Publisher" content="Andavos">
<meta name="Copyright" content="Andavos">
<link rel="stylesheet" href="css/main.css" tppabs="http://www.php-einfach.de/offline/css/main.css" type="text/css">
</head>
<body text="#000000" bgcolor="#DDDDDD" link="#004A95" alink="#004A95" vlink="#525252">
<table align="center" height="100%" width="100%" cellspacing="0" border="0" cellpadding="0">
<tr>
<td align="center" valign="middle" height="100%" width="100%">
<table height="100" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" bgcolor="#FFE09F" width="750"><img src="grafiken/banner_top.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/banner_top.jpg" width="750" height="100" border="0" alt="">
<a name="oben"></a></td>
</tr>
</table>
<table height="650" width="750" cellspacing="0" border="0" cellpadding="0">
<tr>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td class="black" height="100" width="150">
<br><b><center><img src="grafiken/side_navigation.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_navigation.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" class="blue" href="http://www.php-einfach.de/index.php"><b>&raquo;</b> Startseite</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_news.php"><b>&raquo;</b> News&uuml;bersicht</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_email.php"><b>&raquo;</b> Kontakt</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_impressum.php"><b>&raquo;</b> Impressum</a><br><br>
<center><img src="grafiken/side_community.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_community.gif" width="150" height="25" border="0" alt=""></center>
<a target="_blank" class="blue" target="_blank" href="http://forum.php-einfach.de/"><b>&raquo;</b> Forum</a><br>
<a target="_blank" class="blue" href="http://www.php-einfach.de/nav_gaestebuch.php"><b>&raquo;</b> G&auml;stebuch</a><br><br>
<center><img src="grafiken/side_tutorials.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_tutorials.gif" width="150" height="25" border="0" alt=""></center>
<a class="blue" href="einf_php.php.htm" tppabs="http://www.php-einfach.de/offline/einf_php.php"><b>&raquo;</b> Einf&uuml;hrung PHP</a><br>
<a class="blue" href="einf_mysql.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql.php"><b>&raquo;</b> Einf&uuml;hrung MySQL</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_anfang.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_anfang.php"><b>&raquo;</b> Anfang</a><br>
<div style="position: relative; left:15;" ><a class="blue" href="einf_mysql_tabellen_spalten.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_tabellen_spalten.php"><b>&raquo;</b> Tabellen & Spalten</a><br></div>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_tabellen_fuellen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_tabellen_fuellen.php"><b>&raquo;</b> Tabellen f&uuml;llen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_verbindung_aufbauen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_verbindung_aufbauen.php"><b>&raquo;</b> Verbin. aufbauen</a> <br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_einfache_abfrage.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_einfache_abfrage.php"><b>&raquo;</b> Daten ausgeben</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_weitere_abfragen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_weitere_abfragen.php"><b>&raquo;</b> Weitere Abfragen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_schreiben.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_schreiben.php"><b>&raquo;</b> Daten hinzuf&uuml;gen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_aendern.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_aendern.php"><b>&raquo;</b> Daten &auml;ndern</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_daten_loeschen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_daten_loeschen.php"><b>&raquo;</b> Daten l&ouml;schen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_anzahl_zeilen.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_anzahl_zeilen.php"><b>&raquo;</b> Anzahl d. Zeilen</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_verbindung_beenden.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_verbindung_beenden.php"><b>&raquo;</b> Verbin. beenden</a><br>
&nbsp;&nbsp;&nbsp;<a class="blue" href="einf_mysql_error_handling.php.htm" tppabs="http://www.php-einfach.de/offline/einf_mysql_error_handling.php"><b>&raquo;</b> MySQL-Fehler</a><br>
<br>
<br>
<center>
<a target="_blank" href="http://www.php-einfach.de/nav_verlinkung.php"><img src="grafiken/php-einfach.gif" tppabs="http://www.php-einfach.de/offline/grafiken/php-einfach.gif" width="88" height="31" border="0" alt="PHP-Einfach.de"></a><br><br>
<a target="_blank" href="http://www.digicount.de/"><b>Counterdienst:</b></a>
<a target="_blank" href="http://www.php-einfach.de/nav_digicount.php"><div>
<img src="grafiken/digicount_livedemo.jpg" tppabs="http://www.php-einfach.de/offline/grafiken/digicount_livedemo.jpg" border="0" alt="Digicount.de"><br>
<small>Unser werbefreier Counter- und Statistikdienst</small></div>
</a>
</center>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFFFFF" width="430">
<table width="430" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="10"></td>
<td valign="top" class="black" height="100" width="410">
<br>
<h4>MySQL-Error Handling</h4>
Es kommt immer wieder vor, dass eine Abfrage einfach nicht funktioniert. Das Problem dann zu finden ist gar nicht so leicht, aber nur, wenn man ein paar Tricks <b>nicht</b> kennt.<br><br>
Oft bekommt man solch eine Fehlermeldung:<br>
<b>Warning</b>: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /test.php on line <b>5</b><br><br>
Wollen wir uns mal anschauen, wie die Fehlermeldung zustande gekommen ist:
<font color="#606060">
<pre>
&lt;?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)
{
//Mache etwas
}
?>
</pre>
</font>
Also irgendwie meckert PHP herrum, dass etwas mit mysql_fetch_object nicht in Ordnung ist.<br>
Und zwar steht in der Fehlermeldung, dass das Argument (die Variable), keine g&uuml;ltige MySQL-Resource ist. Aber was bedeutet das jetzt?<br>
Und zwar gibt mysql_query(); sofern alles funktioniert hat, eine MySQL-Resource zur&uuml;ck, wenn nicht, ein <font color="#DF0000">false</font>.<br>
Eine MySQL-Resource ist in etwa der Speicherort wo das Ergebnis gespeichert ist.<br><br>
Also bem&auml;ngelt mysql_fetch_object(); das <i>$ergebnis</i> keine g&uuml;ltige Resource ist, also muss <i>$ergebnis</i> <font color="#DF0000">false</font> sein. Daraus folgern wir, dass irgendetwas nicht mit der Abfrage stimmt.<br><br>
Um das herrauszufinden, gibt es die Funktion: <b>mysql_error();</b>. Diese Funktion gibt den letzten MySQL Fehler aus, wir k&ouml;nnen den Script ja z.B. so anpassen:
<font color="#606060">
<pre>
&lt;?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage)
OR die("Error: $abfrage &lt;br>".mysql_error());
while($row = mysql_fetch_object($ergebnis)
{
//Mache etwas
}
?>
</pre>
</font>
Also dieses <i>OR die()</i> bewirkt, dass falls <i>mysql_query()</i> fehlerhaft ist, etwas ausgegeben wird.<br>
Und zwar wird zuerst die Abfrage, und danach die R&uuml;ckgabe von <i>mysql_error()</i> ausgegeben.<br>
Das k&ouml;nnte z.B. so aussehen:<br>
<font color="#606060">
<pre>
Error: SELECT name, password FROM tabelle
Unknown column 'password' in 'field list'
</pre>
</font>
Naja diese Fehlermeldung ist ziehmlich eindeutig, und zwar ist das Feld <i>password</i> nicht vorhanden.
Evt. hei&szlig;t es ja <i>passwor<b>t</b></i> oder <i>pw</i>?.<br><br><br>
Eine weitere Fehlerquelle ist oft soetwas:<br>
<font color="#606060">
<pre>
&lt;?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT betreff, text, show
FROM news WHERE id = '1'";
$ergebnis = mysql_query($abfrage)
OR die("Error: $abfrage &lt;br>".mysql_error());
//....
?>
</pre>
</font>
Dies f&uuml;hrt zu einem Fehler, und zwar:<br>
<font color="#606060">
Error: SELECT betreff, text, show FROM news WHERE id = '1'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM news WHERE id = '1'' at line 1
</font>
<br><br>
Auch wenn die 3 Spalten wirklich vorhanden sind, f&uuml;hrt uns dies nicht weiter.<br>
Denn <b>show</b> (oder <b>SHOW</b>) ist ein von MySQL reserviertes Wort/Befehl. Man kann diesen Namen so nicht als Spaltennamen benutzen, genauso wenig wie z.B. <i>delete</i>, <i>update</i> o.&auml;. hier versagen w&uuml;rde.<br>
Entweder benutzt man also <b>nicht</b> reservierte W&ouml;rter, oder man muss den Spaltennamen <i>show</i> in <b>backticks</b> setzen:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT betreff, text, <b>`</b>show<b>`</b>
FROM news WHERE id = '1'";
//...
?>
</pre>
</font>
Diese backticks (<b>`</b>) sind <b>keine</b> einfachen Anf&uuml;hrungszeichen!<br>
Mit diesen Umschlie&szlig;t man z.B. Spaltennamen, Tabellennamen und &auml;hnliches. <br>
Die Abfrage k&ouml;nnte dann auch so aussehen:
<font color="#606060">
<pre>
&lt;?php
$abfrage = "SELECT `betreff`, `text`, `show`
FROM `news` WHERE `id` = '1'";
//...
?>
</pre>
</font>
Eine Liste mit reservierten W&ouml;rter findet ihr im <a target="_blank" href="http://dev.mysql.com/doc/mysql/en/reserved-words.html">MySQL-Handbuch</a>.
<br><br>
Falls Ihr Hilfe braucht, dann besucht bitte unser <a target="_blank" href="http://forum.php-einfach.de/">Forum</a><br>
Ihr k&ouml;nnt auch ohne Anmeldung Fragen stellen.<br><br>
<br><br>
<a href="http://www.php-einfach.de/nav_impressum.php">Autor Andavos</a>
<div align="center"><a href="#oben">Nach oben</a></div>
</td>
<td height="100" width="10"></td>
</tr>
</table>
</td>
<td valign="top" bgcolor="#FFE09F" width="160">
<table width="160" cellspacing="0" border="0" cellpadding="0">
<tr>
<td height="100" width="5"></td>
<td valign="top" class="black2" height="100" width="150">
<br><b><center><img src="grafiken/side_news.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_news.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://www.php-einfach.de/nav_news.php">News</a>
<br><br>
<b><center><img src="grafiken/side_forum.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_forum.gif" width="150" height="25" border="0" alt=""></center></b>
<a target="_blank" href="http://forum.php-einfach.de/">Forum</a>
<br><br>
<b><center><img src="grafiken/side_newsletter.gif" tppabs="http://www.php-einfach.de/offline/grafiken/side_newsletter.gif" width="150" height="25" border="0" alt="Newsletter"></center></b>
<form target="_blank" method="post" action="http://www.php-einfach.de/clanletter/save.php">
<br> <br>
<div align="center">&copy; PHP-Einfach.de 2003 - 2007 </div>
</td>
<td height="100" width="5"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>