Bahamut: Mysql: syntax error, unexpected $end

Hallo zusammen!

Ich bin eben dabei ein Script für die Firma umzusetzen bzw. zu erneuern, bekomme allerdings beim Versuch die alten Daten ins neue System zu integrieren immer folgenden Fehler: Parse error: syntax error, unexpected $end in /var/www/intranet/fileadmin/WorkFlow/test.php on line 57

Obwohl ich natürlich schon öfters mit kleinen Fehlerchen zu kämpfen hatte, hatte ich noch nie "unexpected $end" als Meldung. Was bedeutet das?

Anbei der Code, welcher den Fehler verursacht...vielleicht bin ich ja wirklich nur blind...

  
		$query2 = "  
			INSERT INTO  
				tbl_ticket_test  
				(  
					`ticket_id`,  
					`ticket_melder`,  
					`ticket_zugeordnet`,  
					`ticket_sachbearbeiter`,  
					`ticket_closed`,  
					`ticket_verrechnung`,  
					`ticket_art`,  
					`ticket_typ`,  
					`ticket_requester`,  
					`ticket_siehe_ticket`,  
					`ticket_kurzbeschreibung`,  
					`ticket_tags`,  
					`ticket_termin`,  
					`ticket_status`,  
					`ticket_prioritaet`,  
					`ticket_weiterleitung`,  
					`ticket_ex_support`,  
					`ticket_ex_ticket`,  
					`ticket_daten`  
				}  
			VALUES  
				{  
					'".$row['id']."',  
					'".$row['melder']."',  
					'".$row['zugeordnet']."',  
					'".$row['sachbearbeiter']."',  
					'".$row['closed']."',  
					'".$row['verrechnung']."',  
					'".$row['art']."',  
					'".$row['typ']."',  
					'".$row['requester']."',  
					'".$row['siehe_ticket']."',  
					'".$row['kurzbeschreibung']."',  
					'".$row['tags']."',  
					'".$row['termin']."',  
					'".$row['status']."',  
					'".$row['prioritaet']."',  
					'".$row['weiterleitung']."',  
					'".$row['ex_support']."',  
					'".$row['exticket']."',  
					'".$row['daten']."'  
				}  
			";  
		mysql_query($query2);  

  1. Das ist kein MySQL Fehler, sondern ein PHP Parse Error.
    Googeln nach "unexpected $end" liefert z.B. das.

    --
    for your security, this text has been encrypted by ROT13 twice.
  2. Der Fehler wird oftmals verursacht, wenn man ein Semikolon vergisst. Hast du aber nicht. Dann wird wohl in einem Element von $row ein Anführungszeichen oder Semikolon stecken, vermutlich in 'kurzbeschreibung' oder 'daten'. Benutze einfach mysql_real_escape_string(), wenn das der Fall ist.

    1. Ach ja, und achte doch in deinem SQL auf die Klammern! Das ist aber nicht die Ursache des Fehlers, denn dein Fehler ist ein PHP-Fehler, und kein MySQL-Fehler.

    2. Hallo und danke für die Antwort.

      Hm, ich habe zuvor über 8400 Text-Felder in die DB übertragen, da kamen haufenweise Semikolons und Anführungszeichen vor. Diese hat er aber anstandslos übernommen. Habe es eben nochmals in der DB kontrolliert, alles tipptopp.

      Nichtsdestotrotz habe ich es mal mit mysql_real_escape_string in den probiert bei den einzigen Feldern wo es möglich ist, dass ein Semikolon oder Anführungszeichen vorkommt. Der Fehler existiert nach wie vor.

      	$query2 = "  
      		INSERT INTO  
      			tbl\_ticket\_test  
      			(  
      				`ticket\_id`,  
      				`ticket\_melder`,  
      				`ticket\_zugeordnet`,  
      				`ticket\_sachbearbeiter`,  
      				`ticket\_closed`,  
      				`ticket\_verrechnung`,  
      				`ticket\_art`,  
      				`ticket\_typ`,  
      				`ticket\_requester`,  
      				`ticket\_siehe\_ticket`,  
      				`ticket\_kurzbeschreibung`,  
      				`ticket\_tags`,  
      				`ticket\_termin`,  
      				`ticket\_status`,  
      				`ticket\_prioritaet`,  
      				`ticket\_weiterleitung`,  
      				`ticket\_ex\_support`,  
      				`ticket\_ex\_ticket`,  
      				`ticket\_daten`  
      			}  
      		VALUES  
      			{  
      				'".$row['id']."',  
      				'".$row['melder']."',  
      				'".$row['zugeordnet']."',  
      				'".$row['sachbearbeiter']."',  
      				'".$row['closed']."',  
      				'".$row['verrechnung']."',  
      				'".$row['art']."',  
      				'".$row['typ']."',  
      				'".$row['requester']."',  
      				'".$row['siehe\_ticket']."',  
      				'".mysql\_real\_escape\_string($row['kurzbeschreibung'])."',  
      				'".mysql\_real\_escape\_string($row['tags'])."',  
      				'".$row['termin']."',  
      				'".$row['status']."',  
      				'".$row['prioritaet']."',  
      				'".$row['weiterleitung']."',  
      				'".$row['ex\_support']."',  
      				'".$row['exticket']."',  
      				'".mysql\_real\_escape\_string($row['daten'])."'  
      			}  
      		";  
      

      PS: Was ist denn an den Klammern in der Abfrage nicht in Ordnung?

      Grüße
      Daniel

      1. Da du deinen Query vorbildlich zusammengesetzt hast (was die Übersichtlichkeit angeht), ist es nun ein leichtes, Zeile 57 zu finden. Welche wäre das? Dort steckt dann der Fehler.

        Die Klammern sind unterschiedlich. Bei SQL gibt es (afair) keine geschwungenen Klammern, nur runde.

        1. Hi!

          Da du deinen Query vorbildlich zusammengesetzt hast (was die Übersichtlichkeit angeht), ist es nun ein leichtes, Zeile 57 zu finden. Welche wäre das? Dort steckt dann der Fehler.

          Nicht unbedingt. Zeilennummer geben Anhaltspunkte. Der Fehler selbst kann irgendwo davor sein, gerade bei Klammern. Das ist wie das Zuknöpfen eines Hemdes. Wenn du oben ankommst und feststellst, dass ein Knopf/Loch, fehlt ist nicht dort der Fehler, sondern irgendwo weiter unten schon passiert. Er wurde jedoch erst oben ankommend bemerkt.

          Lo!

          1. Hallo.

            Was die Klammern angeht: Ich verstehe nun was ihr meint *g*...normalerweise mache ich auch runde Klammern, habe ich diesmal allerdings übersehen.

            Das ganze "Script" an sich ist sehr schnell und einfach dargestellt:

              
            <?php  
              
            	include('connect.php');  
              
            	$query = "SELECT id,melder,zugeordnet,sachbearbeiter,closed,verrechnung,art,typ,requester,siehe_ticket,kurzbeschreibung,tags,termin,status,prioritaet,weiterleitung,ex_support,exticket,daten FROM tbl_ticket";  
            	$query = mysql_query($query);  
            	while($row = mysql_fetch_array($query))  
            	{  
            		$query2 = "  
            			INSERT INTO  
            				tbl_ticket_test  
            				(  
            					`ticket_id`,  
            					`ticket_melder`,  
            					`ticket_zugeordnet`,  
            					`ticket_sachbearbeiter`,  
            					`ticket_closed`,  
            					`ticket_verrechnung`,  
            					`ticket_art`,  
            					`ticket_typ`,  
            					`ticket_requester`,  
            					`ticket_siehe_ticket`,  
            					`ticket_kurzbeschreibung`,  
            					`ticket_tags`,  
            					`ticket_termin`,  
            					`ticket_status`,  
            					`ticket_prioritaet`,  
            					`ticket_weiterleitung`,  
            					`ticket_ex_support`,  
            					`ticket_ex_ticket`,  
            					`ticket_daten`  
            				)  
            			VALUES  
            				(  
            					'".$row['id']."',  
            					'".$row['melder']."',  
            					'".$row['zugeordnet']."',  
            					'".$row['sachbearbeiter']."',  
            					'".$row['closed']."',  
            					'".$row['verrechnung']."',  
            					'".$row['art']."',  
            					'".$row['typ']."',  
            					'".$row['requester']."',  
            					'".$row['siehe_ticket']."',  
            					'".mysql_real_escape_string($row['kurzbeschreibung'])."',  
            					'".mysql_real_escape_string($row['tags'])."',  
            					'".$row['termin']."',  
            					'".$row['status']."',  
            					'".$row['prioritaet']."',  
            					'".$row['weiterleitung']."',  
            					'".$row['ex_support']."',  
            					'".$row['exticket']."',  
            					'".mysql_real_escape_string($row['daten'])."'  
            				)  
            			";  
            		mysql_query($query2);  
            ?>  
            
            

            Zeile 57 ist folgende:
            ?>
            Das hilft mir leider nicht weiter.

            Gruß Daniel

            1. Hi!

              Zeile 57 ist folgende:
              ?>
              Das hilft mir leider nicht weiter.

              Das ist das Ende vom Script. Das darf da aber noch nicht sein, weil noch was offen ist.

              while($row = mysql_fetch_array($query))
              {

              Lo!

              1. Das ist das Ende vom Script. Das darf da aber noch nicht sein, weil noch was offen ist.

                while($row = mysql\_fetch\_array($query))  
                {  
                

                Oh mein Gott, das ist mir jetzt aber wirklich peinlich...vor allem weil man das bei Notepad++ auch noch ziemlich eindeutig sehen kann....jetzt funktioniert es einwandfrei.

                Vielen Dank die Hilfe und Asche auf mein Haupt...
                Ich glaub ich bin überarbeitet...

                Gruß Daniel

  3. Hi!

    Parse error: syntax error, unexpected $end in /var/www/intranet/fileadmin/WorkFlow/test.php on line 57

    Das ist kein MySQL-Fehler sondern ein PHP-Fehler. Irgendwo im PHP-Code fehlt wohl eine schließende Klammer. Das gepostete Stück Code ist jedoch syntaktisch fehlerfrei.

    Der Kontextwechsel sollte stets beachtet werden und nicht nur wenn es unbedingt notwendig erscheint. Unbehandelte Zeichen verursachen Fehler bis Sicherheitslücken.

    Lo!

    1. Hi!

      Parse error: syntax error, unexpected $end in /var/www/intranet/fileadmin/WorkFlow/test.php on line 57

      Das ist kein MySQL-Fehler sondern ein PHP-Fehler. Irgendwo im PHP-Code fehlt wohl eine schließende Klammer. Das gepostete Stück Code ist jedoch syntaktisch fehlerfrei.

      Aus PHP-Sicht zumindest. Der Fehler mit den {} vs. () im SQL-Statement kommt erst beim Ausführen des Statements zum Vorschein, nicht schon beim PHP-Parsen.

      Man muss schon genau hinsehen wo ein Fehler herkommt. MySQL bekommt nur ein SQL-Statement zu Gesicht. Es kann also die Zeilennummer im PHP-Code nicht kennen, weil es von dessen Existenz nichts mitbekommt.

      Lo!

  4. Hallo Bahamut,

    Anbei der Code, welcher den Fehler verursacht...vielleicht bin ich ja wirklich nur blind...

    Bist du sicher, dass das die betroffene Stelle ist? Wenn du diese Zeilen rausnimmst oder durch etwas einfaches ersetzt, tritt dann der Fehler nicht auf?

    ciao
    romy