MySQL Rückgabewert inkorrekt


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tklustig

Erfahrenes Mitglied
#1
Hallo Leute, folgender Code gibt mir auch dann ein TRUE zurück, wenn kein Record gelöscht wurde(weil er nur bis zu einer gewissen Primärschlüsselgrenze existiert)
Wie bekomme ich es hin, dem User mitzuteilen, dass kein Record gelöscht wurde?
PHP:
              try {
                        $sql = 'DELETE FROM temperaturs WHERE id=' . $_REQUEST["anzahlItems"];
                        $connection->beginTransaction();
                        $query2 = $DatabaseObject->Abfragen($connection, $sql);
                        $connection->commit();
                    } catch (Exception $e) {
                        print_r('Fehler:' . $e->getMessage() . ', Felercode:' . $e->getCode() . ', in Zeile:' . $e->getLine() . ' ,in Datei:' . $e->getFile());
                        print_r('<br>Sämtliche Löschvorgänge wurden rückgängig gemacht oder erst gar nicht ausgeführt!');
                        $connection->rollBack();
                        print_r('<br>' . $connection->errorInfo());
                        die();
                    }
                    if ($query2) {
                        ?>
                        <script>
                            var alertWidth = 250;
                            var alertHeight = 200;
                            var xAlertStart = 650;
                            var yAlertStart = 200;
                            var id = "<?php echo $_REQUEST["anzahlItems"] ?>";
                            var alertTitle = "<p class='pTitle'><b>! Warnung !</b></p>";
                            var alertText = "<p class='pAlert'>Der Record mit der ID:" + id + " wurde gelöscht";
                            showAlert(alertWidth, alertHeight, xAlertStart, yAlertStart, alertTitle, alertText);
                        </script>
                        <?php
                    } else {
                        print_r('!!Error!!<br>Datenbankfehler. Abbruch!');
                        print_r('<br>' . $connection->errorInfo());
                        die();
                    }
Hier noch die Methode der Datenbankklasse, die auch dann ein TRUE zurück gibt, sofern kein Record gelöscht wurde
Code:
    public function Abfragen($connection, $sql) {
        $pConn = $connection->prepare($sql);
        $GiveBackBoolean = $pConn->execute();
        $result = array();
        while ($row = $pConn->fetch(PDO::FETCH_ASSOC)) {
            array_push($result, $row);
        }
        if (!empty($result) && is_array($result))
            return $result;
        else
            return $GiveBackBoolean;
    }
 

tklustig

Erfahrenes Mitglied
#2
Vorerst mache ich das, indem ich prüfe, ob der übergebene Primärschlüssel nicht größer als max(id) ist, aber das ist nur eine Notlösung. Mich würde interessieren, warum der Datenbankserver ein TRUE zurück gibt, obgleich die id nicht existiert:
PHP:
          if ($query2 && $_REQUEST["anzahlItems"] <= $maxId) {
                        ?>
                        <script>
                            var alertWidth = 250;
                            var alertHeight = 200;
                            var xAlertStart = 650;
                            var yAlertStart = 200;
                            var id = "<?php echo $_REQUEST["anzahlItems"] ?>";
                            var alertTitle = "<p class='pTitle'><b>! Warnung !</b></p>";
                            var alertText = "<p class='pAlert'>Der Record mit der ID:" + id + " wurde gelöscht";
                            showAlert(alertWidth, alertHeight, xAlertStart, yAlertStart, alertTitle, alertText);
                        </script>
                        <?php
                    } else {
                        print_r('!!Error!!<br>Datenbankfehler. Abbruch!');
                        foreach ($connection->errorInfo() as $item) {
                            print_r('<br>' . $item);
                        }
                        die();
                    }
 

Yaslaw

n/a
Moderator
#3
PDO-Statement-Objekt?
Mittels rowCouint() kannst du ermitteln wie viele Zeilen gelöscht wurde.

Aus der PDO-Doku
Beispiel #1 Return the number of deleted rows

PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.

PHP:
<?php
/* Delete all rows from the FRUIT table */
$del = $dbh->prepare('DELETE FROM fruit');
$del->execute();

/* Return number of rows that were deleted */
print("Return number of rows that were deleted:\n");
$count = $del->rowCount();
print("Deleted $count rows.\n");
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Code:
Deleted 9 rows.
 

tklustig

Erfahrenes Mitglied
#4
Okay. Danke. Diese PDO Methode kannte ich nicht. Dieser Thread kann als erfolgreich gelöst geschlossen werden:
Code:
if ($query2 && $connection->rowCount()>0) {
.
.
}
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…