Vinzenz Mai: PHP/MySQL: Syntax-Fehler

Beitrag lesen

Hallo,

in diesem Beitrag erwähnst Du, dass es zu folgenden Fehlermeldungen kommt:

Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in excel_test.php on line 30
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in excel_test.php on line 47

$sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";

$result = mysql_query($sql_query);

// In der folgenden Zeile gehst Du davon aus, dass mysql_query erfolgreich war. Die Fehlerbehandlung fehlt.

if (!$result) {
      // Huch, ein Fehler ist aufgetreten. Diesen müssen wir behandeln
      // ein einfaches die(mysql_error), wie im [link:http://www.php.net/manual/de/function.mysql-query.php@title=Handbuchbeispiel]
      // ist keine wirkliche Fehlerbehandlung
      // Fürs erste reicht hier allerdings ein
      $out = mysql_error();
      // das Du zum Schluss hübsch ausgeben kannst.
  }
  else {
      // Gültige Ressourcekennung da, Ergebnis kann verarbeitet werden.

$fields_cnt = mysql_num_fields($result);
    $schema_insert = '';
    for ($i = 0; $i < $fields_cnt; $i++) {
        $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,

// Was soll hier stripslashes bewirken?

stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;

// [...]

  
Fürs weitere Vorgehen empfehle ich Dir folgenden Ansatz, das altbewährte EVA-Prinzip:  
  
Eingabe:  
Stelle Query zusammen  
Setze Query an Datenbank ab, behandle auftretende Fehler angemessen.  
Wenn Query erfolgreich abgesetzt, lese Daten in Array ein. Gebe danach die MySQL-Ressource frei.  
  
Verarbeitung:  
Bereite Daten für CSV-Ausgabe auf.  
  
Ausgabe:  
Gebe Daten aus :-)  
  
Sicher benötigt dieser Ansatz mehr Speicher, ich gehe im Moment aber davon aus, dass dies kein Problem darstellt.  
Du vermischst Eingabe und Verarbeitung. Trenne diese. Verwende Funktionen. Kommentiere Deinen Code.  
  
  
Freundliche Grüße  
  
Vinzenz