Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten in Access DB einfügen mit PDO

Einklappen

Neue Werbung 2019

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

  • Daten in Access DB einfügen mit PDO

    Hi,
    ich hoffe mal ich bin hier im richtigen Forum gelandet. Wir sind gerade dabei ein Workflowmanagementsystem ( PHP basiert) ans laufen zu bringen und wollen dafür eine bereits vorhandene MS Access DB anbinden. Das ganze realisieren wir mit PHP PDO. Select / Drop Table Operationen funktionieren so wie es sein soll. Problematisch ist das Einfügen von Daten in die Datenbank. Dabei passiert einfach garnichts. Auf der Benutzeroberfläche sieht es so aus, als hätte alles funktioniert. Nur schreibt er keine Daten in die Datenbank. Es wird kein Fehler ausgegeben bzw. im php error log gespeichert. Berechtigungen etc. sollten soweit alle vorhanden sein. Zumindest kann er mit Drop Table ja auch die Datenbank verändern. Die Anfrage selbst funktioniert auch reibungslos wenn man sie direkt im MS Access client ausführt.
    Dementsprechend ratlos bin ich was das Problem sein könnte.



    Der Code sieht so aus:
    Code:
    // create PDO
    $dbName = $_SERVER["DOCUMENT_ROOT"] . "\test_DB.mdb";
    $conn = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=".$dbName.";Uid=; Pwd=;");
    
    // actual SQL operation   id=integer, username=string, date=access date format, link=access link format
    $sql="INSERT INTO test (id ,username, date, link_to_website) VALUES(1,'testuser', '2017-02-23', 'https://www.test12345.com/')";
    
    // execute operation
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    Habt ihr eine Idee was das Problem sein könnte?

    Danke schonmal für eure Hilfe

    Viele Grüße
    Sicilio

  • #2
    Hast du denn die Fehler überhaupt ausgelesen (errorInfo()), bzw. eine entsprechende Fehlerbehandlung vorgenommen (Exception).
    Normalerweise sollte es da schon eine Fehlermeldung geben.
    "Software is like Sex, it's best if it's free." - Linus Torvalds

    Kommentar


    • #3
      Zitat von JaMa Beitrag anzeigen
      Normalerweise sollte es da schon eine Fehlermeldung geben.
      Standardmäßig werden Fehler nicht behandelt, daß muss explizit per ATTR_ERRMODE gesetzt werden.

      Kommentar


      • #4
        Beispiel: https://php-de.github.io/jumpto/pdo/#create-conn
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von Dormilich Beitrag anzeigen

          Standardmäßig werden Fehler nicht behandelt, daß muss explizit per ATTR_ERRMODE gesetzt werden.
          Deswegen meinte ich, dass bei entsprechender Fehlerbehandlung eine Fehlermeldung vorhanden sein sollte.
          "Software is like Sex, it's best if it's free." - Linus Torvalds

          Kommentar


          • #6
            Es gibt so Momente da würde man am liebsten im Erdboden versinken.. Danke für den Tipp mit der Fehlerausgabe, dachte das macht der immer automatisch (PHP Neuling^^).
            Code:
            SQLSTATE[HYS22]: <<Unknown error>>: -1507 [Microsoft][ODBC-Treiber für Microsoft Access] Die INSERT INTO-Anweisung enthält folgenden unbekannten Feldnamen: 'verlängerung_beantragt'. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und führen Sie dann die Operation nochmals aus. (SQLExecute[-1507] at ext\pdo_odbc\odbc_stmt.c:254)
            Kann es sein, dass der Access ODBC Treiber keine Umlaute in Spaltennamen verträgt?

            Kommentar


            • #7
              Umlaute haben in Spaltennamen eigenltich auch nichts verloren.

              Code:
              'verlängerung
              Bring mal dein Encoding in Ordnung: https://php-de.github.io/jumpto/utf-8/#situation-1
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Umlaute in Spaltennamen sind sowieso ein No-Go, egal bei welchem Datenbanksystem.

                Aber vermutlich verwendest du einfach nur die falsche Zeichenkodierung bzw. gibst sie bei deiner Datenbankverbindung nicht an.

                Kommentar


                • #9
                  Ja das weiß ich auch. Habe die Datenbank "geerbt". Wer auch immer die damals aufgesetzt hat war wohl schon im Feierabend. Allerdings hab ich gerade ein Problem damit herauszufinden wie ich das UTF-8 Encoding bei dem Access ODBC Treiber hinbekomme. Im Moment habe ich es analog zu der MySQL Syntax hinter den DB Pfad geschrieben. Bringt aber nicht das gewünschte Ergebnis. Die falsch dargestellten Umlaute haben sich in der Fehlermeldung zwar etwas geändert aber anscheinend hat Access noch immer ein Problem mit Umlauten. Hat einer von euch eine Idee wie ich das richtig hinbekomme? Tut mir leid, dass ich euch hier mit Anfängerfragen nerve, wurde als Programmieranfänger etwas ins kalte Wasser geworfen^^

                  Verbindung:
                  Code:
                  $dbName = $_SERVER["DOCUMENT_ROOT"] . "\test_DB.mdb; charSet=UTF-8";
                  
                  $conn = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=".$dbName.";Uid=; Pwd=;");
                  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                  Fehlermeldung:
                  Code:
                  SQLSTATE[HYS22]: <<Unknown error>>: -1507 [Microsoft][ODBC-Treiber für Microsoft Access] Die INSERT INTO-Anweisung enthält folgenden unbekannten Feldnamen: 'Verlängerung_beantragt'. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und führen Sie dann die Operation nochmals aus. (SQLExecute[-1507] at ext\pdo_odbc\odbc_stmt.c:254)

                  Kommentar


                  • #10
                    Also bei MySQL heißt es charset=utf8 und nicht charSet=UTF-8.

                    Kommentar


                    • #11
                      Zitat von Sicilio Beitrag anzeigen
                      Habe die Datenbank "geerbt".
                      Würde mich wundern wenn die Datenbank mit UTF-8 arbeitet. Unter Windows läuft doch selten was mit UTF-8. Sollte aber zu ermitteln sein. Oder einfach mal

                      PHP-Code:
                      // execute operation
                      $stmt $conn->prepare(utf8_decode($sql));
                      $stmt->execute(); 
                      probieren.

                      Kommentar


                      • #12
                        Antwort und weiterführende Links lesen zu dem Thema auf
                        http://stackoverflow.com/questions/5...oding-to-utf-8

                        Kommentar

                        Lädt...
                        X