Ankündigung

Einklappen
Keine Ankündigung bisher.

pdo if(execute) macht 2db-Insert

Einklappen

Neue Werbung 2019

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

  • pdo if(execute) macht 2db-Insert

    Moin,

    Folgendes gibt 1 Datenbankeintrag (wenn $grouparr = 1 id, $catarr = 1id ist.
    PHP-Code:
    <?php
          
    if(isset($_POST["categoryname"])){
            
    $grouparr $_POST["group"];
            
    $catarr $_POST["categoryname"];

            
    $value_sets = array();
            foreach(
    $grouparr as $groupid){
              foreach(
    $catarr as $catid){
                
    $value_sets[] = "(".intval($groupid).",".intval($catid).")";
              }
            }
            
    print_r($value_sets);
            
    $add_gcr $pdo->prepare("INSERT INTO link_group_category (groupid, catid) VALUES ".implode(",",$value_sets));

            
    $add_gcr->execute();

          }
    Das gibt 2 Einträge und ich weiss einfach nicht wieso?

    (if($add_gcr->execute()){
    ...
    }
    dazu:

    PHP-Code:
    <?php
          
    if(isset($_POST["categoryname"])){
            
    $grouparr $_POST["group"];
            
    $catarr $_POST["categoryname"];

            
    $value_sets = array();
            foreach(
    $grouparr as $groupid){
              foreach(
    $catarr as $catid){
                
    $value_sets[] = "(".intval($groupid).",".intval($catid).")";
              }
            }
            
    print_r($value_sets);
            
    $add_gcr $pdo->prepare("INSERT INTO link_group_category (groupid, catid) VALUES ".implode(",",$value_sets));

            
    $add_gcr->execute();

            if(
    $add_gcr->execute()){
              
    ?>
              hallo
            <?php
            
    }

          }
    Oder muss ich das wirklich mit

    PHP-Code:
    $insertid $con->lastInsertId();  if ($insertid){ //true }else{ //false } 
    prüfen?

    Gruss Newsletter

  • #2
    Naja, ein zweites execute() führt die Abfrage ein zweites mal aus. Warum wundert dich das?

    Kanns sein, dass du rowCount() verwenden möchtest?

    https://www.php.net/manual/de/pdostatement.rowcount.php

    Kommentar


    • #3
      Hallo,

      sorry das begreife ich jetzt echt nicht... klar

      PHP-Code:
      $add_gcr->execute(); 
      führt die Abfrage aus.

      Aber wenn ich schreibe:

      PHP-Code:
      if($add_gcr->execute()){


      dann erwarte ich doch einen booleanischen Wahrheitswert wie True oder False.

      = Wenn $add_gcr->excute(); ausgeführt wurde dann mache ....

      PDOStatement->execute() returns true on success.
      Or you can just do if ($stmt->execute()) { //true }
      d.h. kein seperates $stmt->execute() = führt zu meinem gewünschten ergebnis.. aber verstehe das nicht ganz wieso er das ausführt...

      rowCount() ist ja das zählen der einträge... das brauche ich ja nicht, wenn ich nur true/false haben will.

      PHP-Code:
      $count = $add_gcr->rowcount();
              if($count > 0){
                ?>
                True
              <?php
              
      }
      führt natürlich zum selben Ergebnis..



      Kommentar


      • #4
        Dann müsstest du:

        PHP-Code:
        $queryStatus $add_gcr->execute(); 

        If (
        $queryStatus) { 
        Bei Dir wird $add_gcr->execute() im if drin nochmals ausgeführt.

        Kommentar


        • #5
          Zitat von jonas3344 Beitrag anzeigen
          Dann müsstest du:

          PHP-Code:
          $queryStatus $add_gcr->execute();

          If (
          $queryStatus) { 
          Bei Dir wird $add_gcr->execute() im if drin nochmals ausgeführt.
          Er will den Rückgabewert von execute() aber nicht haben. Ein TRUE bei execute() sagt nichts darüber aus, ob Daten eingefügt wurden.

          Und wenn man das Exception-Reporting von PDO aktiviert, kann man den Rückgabewert von execute() generell ignorieren, weil der dann immer TRUE ist.

          Kommentar


          • #6
            Mhh okay ja, demfall ein Denkfehler

            PHP-Code:
            $a 10;

            if(
            $a 50){
            print(
            "kleiner");

            führt ja auch zuerst in der Schleife aus macht also demfall schon sinn, dass er auch
            PHP-Code:
            $add_gcr->execute(); 
            ausführt

            Kommentar


            • #7
              Zitat von newsletter Beitrag anzeigen
              Mhh okay ja, demfall ein Denkfehler

              PHP-Code:
              $a 10;

              if(
              $a 50){
              print(
              "kleiner");

              führt ja auch zuerst in der Schleife aus
              Ich seh hier keine Schleife. Nur eine if-Bedinung.

              Zitat von newsletter Beitrag anzeigen
              macht also demfall schon sinn, dass er auch
              PHP-Code:
              $add_gcr->execute(); 
              ausführt
              $a < 50 wird hier auch immer "ausgefühert". Genauso wie dein execute() in der if-Bedingung.

              Kommentar


              • #8
                Execute gehört zu prepared statements, dass ist hier nicht gegeben, daher
                PHP-Code:
                <?php
                $sql 
                'INSERT INTO `link_group_category` (`groupid`, `catid`)
                        VALUES ".implode(",",$value_sets)'
                ;

                if(
                $add_gcr->exec($sql){

                  echo 
                'Daten erfolgreich eingetragen';

                }
                https://www.php.net/manual/en/pdo.exec.php

                Kommentar

                Lädt...
                X