dedlfix: (MySQL) Daten werden manchmal geliefert, manchmal nicht

Beitrag lesen

Hi!

Es werden auch keine SQL-Fehler im Errorlog ausgegeben.

PHP schreibt keine SQL-Fehler in sein Error-Log, oder welches konkret meinst du?

Es werden einfach nur keine Daten geliefert. Ich kann mir das nicht erklären. Klicke ich ein paar mal wieder auf den selben Link, der die Daten abruft, kann es sein, dass es ein paar Mal nicht funktioniert, dann funktioniert es wieder 20 Mal hintereinander. Dann funktioniert es wieder ein Mal nicht. Wie kann das sein?

Dies ist die Datei, die den Inhalt ausgibt:

Die ist unwichtig. Mach lieber Kontrollausgaben (mit var_dump()) von strategisch wichtigen Variablen und vergleiche Wunsch und Wirklichkeit

echo "<tr><td style="width:15%"><b>Marke</b></td><td style="width:60%">" . $h_name . "</td><td></td></tr>\n";
   echo "<tr><td></td><td><input type="hidden" name="id" value="$h_id" />";

Die Variablen enthalten HTML-Code? Wenn nicht, sind sie für HTML aufbereitet, so dass ein < vom Browser auch als < aufgefasst wird und nicht als Tag-Öffner?

Dies ist die Methode, die die Daten ausliest:

Die ist schon interessanter, aber ohne Kontrollausgaben nur vom Code her bewertbar.

if (!($con = mysql_pconnect(DB_HOST, DB_USER, DB_PASS)))   {

Bist du sicher, dass du die P-Variante verstanden und alles dafür notwendige vorbereitet hast? Wenn nicht, nimm lieber das normale mysql_connect(). (Und noch besser wäre eine moderne Variante: mysqli.)

    		  	echo "Datenbankverbindung fehlgeschlagen: " . mysql\_error($con) . "\n";  
    		  	exit(-1);  

Bist du weiterhin sicher, dass du im Falle eines Fehlers den Anwendern technische Detailinformationen zur Verfügung stellen willst, obwohl diese damit vermutlich/hoffentlich nichts anfangen können und dass du dem Browser durch das exit() mit einer wahrscheinlich unvollständigen Seite abspeisen willst?

    		    mysql\_close($con);  

Du brauchst nicht übertrieben oft die Verbindung zu schließen. Im Allgemeinen reicht es aus, das händisch zu tun, wenn das Script nachher noch deutlich lange arbeiten muss und die Ressource wieder freigegeben werden soll. Ansonsten räumt PHP diese am Script-Ende automatisch auf.

  	  if (!($result = mysql\_query($query\_string, $con)))   {  
  		 	mysql\_close($con);  
  		 	echo "Brillenmarke auslesen fehlgeschlagen: " . mysql\_errno($con) . " " . mysql\_error($con) . "\n";  

Ob nach dem Schließen der Verbindung die Fehlermeldung noch ausgelesen werden kann, die noch dazu von einer noch davor stattgefunden habenden mysql-Funktion (möglicherweise) erzeugt wurde? Eine solche Fehlermeldung steht auch nicht im HTML-Quellcode der ausgelieferten Seite und wird aufgrund von vorhergehendem HTML- oder CSS-Code nur nicht im Browser angezeigt?

mysql_free_result($result);

Für mysql_free_result() gilt das gleiche wie für mysql_close().

Lo!