Fehlermeldung bei INSERT INTO Anweisung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehlermeldung bei INSERT INTO Anweisung

    Hallo,

    ich habe da ein Problem:

    ich benutze ACCESS mit ODBC und habe nachträglich ein AutoWert-Feld namens ID als Primärschlüssel eingerichtet.

    Die ursprüngliche (funktionierende) Anweisung mit 'Titel' als Primärschlüssel war:

    $sql = "INSERT INTO $dbname VALUES ('".$titel."','".$autor."','".$login."','".$pass."','".$hochschule."','".$lehrstuhl."','".$lehrer."' ,'".$strasse."','".$hausnummer."','".$plz."','".$ort."','".$url."','".$npartner."','".$tpartner."',' ".$epartner."','".$zielgruppe."','".$format."','".$wo."','".$direkturl."','".$preis."','".$date."',' ".$beschreibung."')";

    Da das AutoWert-Feld sich ja wohl automatisch einträgt, habe ich die Anweisung wie folgt geändert (kein break nach VALUES):

    $sql = "INSERT INTO $dbname (titel, autor, login, pass, hochschule, lehrstuhl, lehrer, strasse, hausnummer, plz, ort, url, npartner, tpartner, epartner, zielgruppe, format, wo, direkturl, preis, date, beschreibung) ".
    "VALUES ('".$titel."','".$autor."','".$login."','".$pass."','".$hochschule."','".$lehrstuhl."','".$lehrer."' ,'".$strasse."','".$hausnummer."','".$plz."','".$ort."','".$url."','".$npartner."','".$tpartner."',' ".$epartner."','".$zielgruppe."','".$format."','".$wo."','".$direkturl."','".$preis."','".$date."',' ".$beschreibung."')";

    Nun bekomme ich folgende Fehlermeldung:

    Warning: SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntaxfehler in der INSERT INTO-Anweisung., SQL state 37000 in SQLExecDirect in c:/programme/apache group/apache/htdocs/befragung/accessversion/alteruser.php on line 39

    Was mache ich falsch, bzw. wie geht man mit AutoWert-Feldern in den ODBC-Anweisungen um ?


  • #2
    Ich würde den Query erstmal stark verkürzen, um zu schauen, ob da insgesamt was nicht stimmt:

    $sql="insert into $dbname (title) value ('$title')";

    wenns klappt dann nach und nach die Werte ergänzen und so den Fehler suchen.
    Ansonsten sieht der Query richtig aus. Außer deiner Verkettung des $sql mit ".", ist nicht nötig.

    P.S.: achja, laß die doch per echo $sql; mal den Query anzeigen, vielleicht siehst du da ja auch ein Fehler (wenn z.B. irgendwo ein ' vorkommt, dann bringt das ja deinen Query durcheinander)

    Kommentar


    • #3
      Danke für Deinen Tip.

      Den VALUES-Teil habe ich ja 1:1 aus der alten Anfrage kopiert, da sollte eigentlich alles stimmen (hat ja vorher auch funktioniert).

      Ich weiss nur nicht, ob mein Gedankengang richtig ist, die ganzen Variablen bis auf 'id' vorne nochmal aufzulisten und den VALUES-Teil so zu lassen. Bei ganz unveränderter Anfrage sagt er mir :

      'Anzahl der Variablen stimmt nicht mit erwartetem Wert überein ' oder so ähnlich ( bin jetzt an einem anderen Rechner ).

      Kommentar


      • #4
        Das deutet eigentlich auf einen Fehler im Query selbst hin. Laß ihn dir ausgeben und schau, ob da irgendwo in den Variablen ein Hochkomma vorkommt. Das wird natürlich als Bregrenzung eines Wertes interpretiert.
        Falls dies der Fall, mußt du entweder vorher mit
        $titel=str_replace("'","´",$titel);
        alle Hochkommas durch diese komischen Kommentierhaken ersetzen oder du umgehst alles und arbeitest mit
        $titel=urlencode($titel);
        beim Reinschreiben. Mußt allerdings beim Auslesen mit urldecode($titel) oder beim suchen in DB dann immer urlencode() arbeiten.

        Kommentar


        • #5
          zum Testen reicht auch erstmal ein echo str_replace ("\n", '\n', htmlentities($sql)); vorher und ein echo odbc_errormsg (); hinterher.
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar


          • #6
            Hey Leute, ich hab die Lösung, die so trivial ist daß es schon weh tut:

            der Feldname "date" ist ein "reserviertes Wort" in ACCESS,
            ich hab einfach den Namen in "eintragsdatum" geändert - et voila !

            Da muß man erst mal drauf kommen!

            Trotzdem danke für eure Hilfe und happy developing !

            Kommentar

            Lädt...
            X