Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] INSERT INTO PDO will nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] INSERT INTO PDO will nicht

    Hallo zusammen,

    ich möchte mit Hilfe von PDO auf meinen SQL-Server zugreifen bzw. Daten hinzufügen, das Auslesen mit Hilfe von
    PHP-Code:
    $Query =    "SELECT * FROM dbo.meine_Datenbank";
    connection->query($Query); 
    klappt prima.
    Nur die Daten einlesen das will nicht so Recht funktionieren, ich habe mir extra ein paar Ausgaben eingebaut, aber bei der Ausgabe 05 ist Schluss.
    Ich weiß nicht so Recht, was ich falsch mache, ich hoffe hier kann mir einer Helfen, durch Google und die Suche hier bin ich auch nicht viel schlauer geworden.
    Danke für die Hilfe in voraus!
    Hier mein Code:
    PHP-Code:

        
    echo "Ausgabe 01 <br>";

        
    $Servername =       "Mein Server";
        
    $Username =         "mein Username";
        
    $Passwordphrase =   "mein Passwort";
        
    $Databasename =     "mein Datenbankname";

        echo 
    "Ausgabe 02 <br>";
        
        
    $_Vorname   =   'Test';
        
    $_Nachname  =   'Test';
        
    $_Kennung   =   'Test';
        
    $_Passwort  =   'Test';
        
    $_Maßnahme   =  'Test';
        
    $_Datum     =   '23-10-14';
        
    $_Aktiv     =       1;
            
            
            echo 
    "Ausgabe 03 <br>";
            try 
            {
                
    $dbh = new PDO("sqlsrv:server=$Servername;Database=$Databasename",$Username,$Passwordphrase);
                
    $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
            }
            catch(
    PDOException $e)
            {
                die (
    "Error connecting to SQL Server");
            }
           echo 
    "Connected to SQL Server <br>";
               
            echo 
    "Ausgabe 04 <br>";
            
            
    $sql "INSERT INTO dbo.Teilnehmer (Vorname,Name,Kennung,PWD,Maßnahme,Aktiv,Erstellt_geaendert) 
                        VALUES (':Vorname',':Nachname',':Kennung',':Passwort',':Maßnahme',:Aktiv,(convert(date,':Datum',5)));"
    ;
            
            echo 
    "Ausgabe 05 <br>";
            
            
    $Query $dbh->prepare($sql);
            
            echo 
    "Ausgabe 05a <br>";
            
            
    $Query->bindParam(':Vorname',$_Vorname,PDO::PARAM_STR);
            echo 
    "Ausgabe 05b <br>";
            
    $Query->bindParam(':Nachname',$_Nachname,PDO::PARAM_STR);
            
    $Query->bindParam(':Kennung',$_Kennung,PDO::PARAM_STR);
            
    $Query->bindParam(':Passwort',$_Passwort,PDO::PARAM_STR);
            
    $Query->bindParam(':Maßname',$_Maßnahme,PDO::PARAM_STR);
            
    $Query->bindParam(':Aktiv',$_Aktiv,PDO::PARAM_INT);
            
    $Query->bindParam(':Datum',$_Datum,PDO::PARAM_STR);
            
            echo 
    "Ausgabe 06 <br>";
            
            
    $Query->execute();
            
            echo 
    "Ausgabe 07 <br>"
    PS: die Serverangaben sind im Original natürlich andere und wurden schon erfolgreich getestet


  • #2
    Vermutlich ist dein Statement ($sql) falsch.

    Was gibt ein var_dump($Query) aus? Oder wenn du danach auf Fehler abfragst? http://php.net/manual/de/pdostatement.errorinfo.php

    Versuch mal ohne Hochkommas in der query, bei den Platzhaltern.
    http://www.peterkropff.de/site/php/pdo_platzhalter.htm

    etc..
    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


    • #3
      Ich bin mir nicht sicher aber ist es nicht verboten ein 'ß' in einem Spaltenname zu verwenden? Vorallem wenn man kein Zeichensatz angegeben hat.

      Kommentar


      • #4
        Auch durch Aktivieren des Error-Reportings, sprich Einfügen von

        PHP-Code:
        ini_set('display_errors''On');
        error_reporting(-1);    //max. aufgedreht 
        am Anfang des PHP-Scriptes solltest du Hinweise auf Fehler und Unzulänglichkeiten erhalten. So auch vermutlich den Hnweis, daß $Query kein Objekt ist und ein bindParam fehlschlägt.
        Wenn Umlaute in Tabellen- und Feldnamen vermieden werden, ist man immer auf der sicheren Seite.
        PHP-Klassen auf github

        Kommentar


        • #5
          Danke erstmal für die Tipps, ich habe den Code wie folgt geändert:
          PHP-Code:
          ini_set('display_errors','On');
          error_reporting(-1);



              echo 
          "Ausgabe 01 <br>";

              
          $Servername =       "meinServer";
              
          $Username =         "meinUser";
              
          $Passwordphrase =   "meinPasswort";
              
          $Databasename =     "meinDatenbankname";

              echo 
          "Ausgabe 02 <br>";
              
              
          $_Vorname   =   'Test';
              
          $_Nachname  =   'Test';
              
          $_Kennung   =   'Test';
              
          $_Passwort  =   'Test';
              
          $_Masznahme   =  'Test';
              
          $_Datum     =   '23-10-14';
              
          $_Aktiv     =       1;
                  
                  
                  echo 
          "Ausgabe 03 <br>";
                  try 
                  {
                      
          $dbh = new PDO("sqlsrv:server=$Servername;Database=$Databasename",$Username,$Passwordphrase);
                      
          $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                  }
                  catch(
          PDOException $e)
                  {
                      die (
          "Error connecting to SQL Server");
                  }
                 echo 
          "Connected to SQL Server <br>";
                     
                  echo 
          "Ausgabe 04 <br>";
                  
                  
          $sql "INSERT INTO dbo.Teilnehmer (Vorname,Name,Kennung,PWD,Maßnahme,Aktiv,Erstellt_geaendert) 
                              VALUES (:Vorname,:Nachname,:Kennung,:Passwort,:Masznahme,:Aktiv,(convert(date,':Datum',5)));"
          ;
                  
                  echo 
          "Ausgabe 05 <br>";
                  
                  
          $Query $dbh->prepare($sql);
                  
                  echo 
          "Ausgabe 05a <br>";
                  
                  
          $Query->bindParam(':Vorname',$_Vorname,PDO::PARAM_STR);
                  echo 
          "Ausgabe 05b <br>";
                  
          $Query->bindParam(':Nachname',$_Nachname,PDO::PARAM_STR);
                  
          $Query->bindParam(':Kennung',$_Kennung,PDO::PARAM_STR);
                  
          $Query->bindParam(':Passwort',$_Passwort,PDO::PARAM_STR);
                  
          $Query->bindParam(':Maszname',$_Masznahme,PDO::PARAM_STR);
                  
          $Query->bindParam(':Aktiv',$_Aktiv,PDO::PARAM_INT);
                  
          $Query->bindParam(':Datum',$_Datum,PDO::PARAM_STR);
                  
                  echo 
          "Ausgabe 06 <br>";
                  
                  
          $Query->execute();
                  
                  echo 
          "Ausgabe 07 <br>";
              
          ?> 
          und bekomme folgende Ausgabe:
          Ausgabe 01
          Ausgabe 02
          Ausgabe 03
          Connected to SQL Server
          Ausgabe 04
          Ausgabe 05
          Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IMSSP]: An error occurred translating the query string to UTF-16: Für das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden. .' in C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php:45 Stack trace: #0 C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php(45): PDO->prepare('INSERT INTO dbo...') #1 {main} thrown in C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php on line 45
          So richtig schlau werde ich leider nicht daraus, kann mir jmd. sagen was da nicht stimmt?

          Kommentar


          • #6
            Okay, ich hab den Fehler gefunden, da war noch ne Maßnahme in der Query mit "ß", aber nun kommt folgende Meldung:

            Ausgabe 01
            Ausgabe 02
            Ausgabe 03
            Connected to SQL Server
            Ausgabe 04
            Ausgabe 05
            Ausgabe 05a
            Ausgabe 05b
            Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php:54 Stack trace: #0 C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php(54): PDOStatement->bindParam(':Maszname', 'Test', 2) #1 {main} thrown in C:\inetpub\wwwroot\test_markwart\InputData_Benutze rkontenprojekt.php on line 54

            Kommentar


            • #7
              Problem gelöst

              So, mittlerweile konnte ich das Problem lösen, vielen Dank für die schnell und gute Hilfe!!
              Für kommende Leser schnell die Lösung:
              - Hochkommas in der Query löschen
              - Umlaute und Sonderzeichen wie (in meinem Fall ß) ersetzen

              Hier der nun funktionierenden Code:
              PHP-Code:
              <?php

              ini_set
              ('display_errors','On');
              error_reporting(-1);



                  echo 
              "Ausgabe 01 <br>";

                  
              $Servername =       "mein Server";
                  
              $Username =         "mein User";
                  
              $Passwordphrase =   "mein Passwort";
                  
              $Databasename =     "meine Datenbank";

                  echo 
              "Ausgabe 02 <br>";
                  
                  
              $_Vorname   =   'Test';
                  
              $_Nachname  =   'Test';
                  
              $_Kennung   =   'Test';
                  
              $_Passwort  =   'Test';
                  
              $_Masznahme   =  'Test';
                  
              $_Datum     =   '23-10-14';
                  
              $_Aktiv     =       1;
                      
                      
                      echo 
              "Ausgabe 03 <br>";
                      try 
                      {
                          
              $dbh = new PDO("sqlsrv:server=$Servername;Database=$Databasename",$Username,$Passwordphrase);
                          
              $dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
                      }
                      catch(
              PDOException $e)
                      {
                          die (
              "Error connecting to SQL Server");
                      }
                     echo 
              "Connected to SQL Server <br>";
                         
                      echo 
              "Ausgabe 04 <br>";
                      
                      
              $sql "INSERT INTO dbo.Teilnehmer (Vorname,Name,Kennung,PWD,Masznahme,Aktiv,Erstellt_geaendert) 
                                  VALUES (:Vorname,:Nachname,:Kennung,:Passwort,:Masznahme,:Aktiv,(convert(date,:Datum,5)));"
              ;
                      
                      echo 
              "Ausgabe 05 <br>";
                      
                      
              $Query $dbh->prepare($sql);
                      
                      echo 
              "Ausgabe 05a <br>";
                      
                      
              $Query->bindParam(':Vorname',$_Vorname,PDO::PARAM_STR);
                      echo 
              "Ausgabe 05b <br>";
                      
              $Query->bindParam(':Nachname',$_Nachname,PDO::PARAM_STR);
                      
              $Query->bindParam(':Kennung',$_Kennung,PDO::PARAM_STR);
                      
              $Query->bindParam(':Passwort',$_Passwort,PDO::PARAM_STR);
                      
              $Query->bindParam(':Masznahme',$_Masznahme,PDO::PARAM_STR);
                      
              $Query->bindParam(':Aktiv',$_Aktiv,PDO::PARAM_INT);
                      
              $Query->bindParam(':Datum',$_Datum,PDO::PARAM_STR);
                      
                      echo 
              "Ausgabe 06 <br>";
                      
                      
              $Query->execute();
                      
                      echo 
              "Ausgabe 07 <br>";
                  
              ?>
              mit folgender Ausgabe:
              Ausgabe 01
              Ausgabe 02
              Ausgabe 03
              Connected to SQL Server
              Ausgabe 04
              Ausgabe 05
              Ausgabe 05a
              Ausgabe 05b
              Ausgabe 06
              Ausgabe 07
              Vielen Dank nochmal und bis zum nächsten Mal!

              Kommentar

              Lädt...
              X