Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT ON DUPLICATE KEY UPDATE mit Library pdo.php

Einklappen

Neue Werbung 2019

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

  • INSERT ON DUPLICATE KEY UPDATE mit Library pdo.php

    Hallo Zusammen,
    ich nutze seit Kurzem diese Libary für MySQL-Zugriffe über PDO (unten der Link).
    Nun möchte ich auch ein INSERT ON DUPLICATE KEY UPDATE hinbekommen. Vielleicht geht das auch gar nicht.
    So sieht das normale INSERT aus ($pdo ist für den Connect da.):
    PHP-Code:
    $query "INSERT INTO user (first_name, last_name)
               VALUES (?, ?)"
    ;
        
    SQL_Exec ($pdo$query, [$_POST["first_name"], $_POST["last_name"]]); 
    Das ist die Funktion:
    PHP-Code:
    function SQL_Exec ($pdo$query$values false)
    {
        try
        {
            if (!
    $values)
            {
                
    $pdo->exec ($query);
            }
            else
            {
                
    $stmt $pdo->prepare ($query);
                
    $stmt->execute ($values);
                
    $stmt null;
            }
        }
        catch (
    PDOException $e)
        {
            
    SQL_Error ($e$query);
        }

    Und nun frage ich mich, wie ich auch das "INSERT ON DUPLICATE KEY UPDATE" reinbekomme, wenn es überhaupt geht.

    Danke für Tipps. Steve7

    https://www.plop.at/de/pdo.html



  • #2
    Mit einem Befehlszusatz, siehe https://www.strassenprogrammierer.de..._tipp_531.html

    Kommentar


    • #3
      Zitat von protestix Beitrag anzeigen
      Wie die native Syntax lautet, weiß ich. Meine Frage war, wie gehts mit der Libary.
      PHP-Code:
      $query "INSERT INTO user (first_name, last_name)
                 VALUES (?, ?) ON DUPLICATE KEY UPDATE"
      ;
          
      SQL_Exec ($pdo$query, [$_POST["first_name"], $_POST["last_name"]]); 
      funkioniert ja nicht.

      Kommentar


      • #4
        Welche Spalten sind denn überhaupt unique?
        first_name sowie last_name können es ja nicht sein, da ja Namen mehrfach vorkommen können.
        https://dev.mysql.com/doc/refman/8.0...duplicate.html

        Kommentar


        • #5
          Ich hatte ein leicht adaptiertes Testbeispiel. Hier der 1:1 Code:
          Die Tabelle hat 4 Spalten, innoDB: ID, TEXTID, NAME, VORNAME

          ID ist primary key und autoencrement
          TEXTID unique

          PHP-Code:
          $query "INSERT INTO test2 (TEXTID, NAME, VORNAME)
                 VALUES (?, ?, ?) "
          ;
          SQL_Exec ($pdo$query, ["aaa""bbb""ccc"]); 
          Funktioniert, wenn TEXTID nicht unique ist.

          PHP-Code:
          $query "INSERT INTO test2 (TEXTID, NAME, VORNAME)
                 VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE"
          ;
          SQL_Exec ($pdo$query, ["aaa""bbbxxx""cccyyy"]); 
          Funktioniert nicht (Syntaxerror).

          Kommentar


          • #6
            Hast du dir das alles mal durchgelesen, ich glaube nicht.
            Du musst auch angeben was im Falle eines update passieren soll.

            Achte auch auf deine Schreibweise Gross- Kleinschreibung etc., Deine Beispiele sind da ziemlich fantasievoll

            Beispiel
            PHP-Code:
            $query "INSERT INTO test2 (textid, name, vorname)
                   VALUES (:textid, :name, :vorname) ON DUPLICATE KEY UPDATE name=:name, vorname=:vorname"
            ;

            $stmt $pdo->prepare($query);                      

            $stmt->execute([':textid' =>'aaa'':name' => 'Meier'':vorname' => 'Thomas']); 

            Kommentar


            • #7
              Ich denke, ich habs jetzt hinbekommen. Ich habe Dein Bsp. interpretiert für die Libary. Mir ging es ja um die Libary. Hast Du Dir die angesehen? Ich finde, die vereinfacht es ein bißchen.
              https://www.plop.at/de/pdo.html#examples


              PHP-Code:
              $query "INSERT INTO test2 (TEXTID, NAME, VORNAME)
                         VALUES (:TEXTID, :NAME, :VORNAME) ON DUPLICATE KEY UPDATE NAME=:NAME, VORNAME=:VORNAME"
              ;

              $named_params = [ ":TEXTID" => "aaa",   
                                 
              ":NAME"  => "meierrrr",
                                 
              ":VORNAME"  => "thomassss"
                               
              ];

              SQL_Exec ($pdo$query$named_params); 
              Der fehlende Doppelpunkt bzw. Hochkomma war nur typo bei Dir?

              Danke für die Unterstützung. Gruss

              Kommentar


              • #8
                Platzhalter mehrmals im Query verwenden funktioniert in PDO?

                Kommentar


                • #9
                  @Blair
                  Das Handbuch sagt
                  You must include a unique parameter marker for each value you wish to pass in to the statement when you call PDOStatement::execute(). You cannot use a named parameter marker of the same name more than once in a prepared statement, unless emulation mode is on.
                  Ehrlich gesagt habe ich das nicht getestet ob mein Beispiel geht. Weisst du mehr dazu?

                  steve7
                  Ja war ein Tippfehler.

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    @Blair
                    Ehrlich gesagt habe ich das nicht getestet ob mein Beispiel geht. Weisst du mehr dazu?
                    Das Bsp. von mir oben (12:07) funktioniert.

                    Kommentar


                    • #11
                      Zitat von Blar Beitrag anzeigen
                      Platzhalter mehrmals im Query verwenden funktioniert in PDO?
                      Wenn es im Emulationsmodus (PDO::ATTR_EMULATE_PREPARES) läuft, ja.

                      Kommentar

                      Lädt...
                      X