Ankündigung

Einklappen
Keine Ankündigung bisher.

Funktion mit Array und prepare in Datenbank schreiben

Einklappen

Neue Werbung 2019

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

  • #31
    - Das include aus der Funktion entfernen
    - Funktionssignatur um den Parameter $dbh erweitern
    - im aufgrufenden Script db.inc includen und $dbh anlegen
    - Beim Aufruf der Funktion $dbh übergeben

    PHP-Code:
    function dbin($dbh) {
      
    $dbh->prepare(...);
      
    // usw.
    }

    include 
    'db.inc.php';
    $dbh = new PDO(...);
    // Funktion aufrufen
    dbin($dbh); 
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #32
      Bekomme dann wieder ein Fatal error: Call to a member function prepare() on null Was wohl dafür spricht das ich beim Aufruf der Funktion $dbh nicht richtig übergebe? Ich hatte jetzt auch probiert die Sache etwas zu reduzieren nur ein Feld zu nehmen etc.
      Okay, wer lesen kann ist klar im Vorteil
      PHP-Code:
       function dbin($dbh)
       { 
      aber ich erhalte trotzdem wieder begin debugobject(PDOStatement)#2 (1) { ["queryString"]=> string(61) "INSERT INTO tabelle_log (field, value) VALUES (:field, :value)" } end debug und es wird nicht in die Datenbank geschrieben, langsam bin ich am verzweifeln.

      Kommentar


      • #33
        Bis dahin ist ja noch alles ok... der Teil ist interessant:
        PHP-Code:
        foreach($felder as $field => $val) {
            
        $stmt->execute(array(':field' => $field':value' => $val));
            } 
        Hier muss dein weiteres Debugging ansetzen.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #34
          Hab ich erweitert:
          PHP-Code:
          echo "end debug";
          foreach(
          $felder as $field => $val) {
              
          $stmt->execute(array(':field' => $field':value' => $val));
          echo 
          "$field = $val <br />\n";
              } 
          Gibt mir Feldname = Inhalt aus, werde langsam verrückt.

          Bleibt ja eigentlich nur, das es nicht in die DB übertragen wird
          Ich glaube ich habe mir einen fetten Syntaxfehler eingebaut:
          PHP-Code:
              $dbh = new PDO('mysql:host=' $dbserver ';dbname=' $dbname$dbuser$dbpass); 
          Die Variablen sind korrekt belegt, aber das mit dem Komma haut doch so vermutlich gar nicht hin ? Daran scheint es aber auch nicht zu liegen, habe die Daten direkt reingeschrieben. Keine Änderung es wird nicht in die DB geschrieben.

          Kommentar


          • #35
            PHP-Code:
             $stmt->execute(array(':field' => $field':value' => $val)); 
            *seufz*
            Diese Funktion liefert "true" oder "false". Wenn "false" => errorCode & errorInfo abfragen.

            http://de2.php.net/manual/de/pdostatement.errorcode.php

            http://de2.php.net/manual/de/pdostatement.errorinfo.php
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #36
              Aber dann kann es doch nur noch an
              PHP-Code:
              $stmt $dbh->prepare('INSERT INTO my_log (field, value) VALUES (:field, :value)'); 
              liegen ?! für
              PHP-Code:
              var_dump($stmt); 
              erfolgt aber eine Ausgabe object(PDOStatement)#2 (1) { ["queryString"]=> string(57) "INSERT INTO my_log (field, value) VALUES (:field, :value)" } dann muss das doch okay sein ?!
              PHP-Code:
              $stmt $dbh->prepare('INSERT INTO my_log (kdnr, grund) VALUES ("12345", "keiner")'); 
              schreibt mir dreimal in die DB in Feld kdnr den Wert 12345 und dreimal keiner in Grund; Verbindung zu DB sollte also okay sein nur die Umsetzung des ausgelesenen Arrays nicht.

              Kommentar


              • #37
                NACH dem execute() bitte das einfügen:
                PHP-Code:
                $inf $stmt->errorInfo();
                var_dump($inf); 
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #38
                  Ich glaube es wird heller am Ende des Tunnels
                  debugarray(3) { [0]=> string(5) "42S22" [1]=> int(1054) [2]=> string(3 "Unknown column 'field' in 'field list'" } array(3) { [0]=> string(5) "42S22" [1]=> int(1054) [2]=> string(3 "Unknown column 'field' in 'field list'" } array(3) { [0]=> string(5) "42S22" [1]=> int(1054) [2]=> string(3 "Unknown column 'field' in 'field list'" }

                  Aber field sollte er doch dank dem foreach kennen und kann es doch auch ausgeben über ein Echo ?!

                  Kommentar


                  • #39
                    INSERT INTO my_log (field, value)
                    INSERT INTO my_log (kdnr, grund)

                    Heißt die Spalte jetzt field oder kdnr?
                    Zeig doch mal bitte immer nicht nur eine Zeile des Code, sondern gleich die ganze Funktion. Dazu postest du dann noch, wie deine Tabelle aufgebaut ist.
                    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                    Kommentar


                    • #40
                      Hallo VPh,

                      field existiert natürlich nicht in der Tabelle. field und value sollen ja aus dem array kommen, damit die Function für alle anderen Formulare auch genutzt werden kann. kdnr und grund hatte ich nur testweise eingesetzt, damit ich die Verbindung testen kann.

                      Gruß
                      Micha

                      Werde heute im Laufe des Tages noch versuchen die Scripte zu posten.

                      Kommentar


                      • #41
                        Ja, aber warum versuchst du denn in die Spalte "field" zu schreiben? Zumindest laut deiner Fehlermeldung.

                        kA... du wirst das schon machen.
                        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                        Kommentar


                        • #42
                          Zitat von mfeske Beitrag anzeigen
                          field und value sollen ja aus dem array kommen, damit die Function für alle anderen Formulare auch genutzt werden kann.
                          Das machst du im Code aber nicht, du ersetzt "field" und "value" in der Fieldlist nicht durch etwas anderes!

                          Für das Ersetzen von Tabellen- und Feldnamen kannst du auch nicht bindParam() oder bindValue() benutzen, beim prepare() muss die Datenbank wissen, welche Tabelle und Felder benutzt werden.
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #43
                            Zitat von lstegelitz Beitrag anzeigen
                            Für das Ersetzen von Tabellen- und Feldnamen kannst du auch nicht bindParam() oder bindValue() benutzen, beim prepare() muss die Datenbank wissen, welche Tabelle und Felder benutzt werden.
                            Das wird hier MySQL PDO: Validieren und Maskieren von Feld- und Tabellennamen diskutiert.

                            Kommentar


                            • #44
                              ich glaube ich habe meinen Denkfehler entdeckt, ich muss im foreach zwei array für field und value jeweils mit komma erstelllen ?!

                              Gruß
                              Micha

                              Kommentar


                              • #45
                                Keine Ahnung was du meinst. Schon ausprobiert?
                                [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                                [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                                Kommentar

                                Lädt...
                                X