Hallo
function test123($mysqli) { $stmt = $mysqli->prepare("SELECT id FROM warenkorb WHERE DATE( FROM_UNIXTIME( datum ) ) > NOW() - INTERVAL 2 DAY"); $stmt->execute(); $stmt->bind_result($id); $stmt->store_result(); if($stmt->num_rows() > 0) { while ($stmt->fetch()){ $test123[] = array( 'id' => $id ); } return $test123; } } $EinfachTest = test123($mysqli); if($EinfachTest > 0) { foreach($EinfachTest as $array){ $stmt = $mysqli->prepare("DELETE FROM warenkorb WHERE id=? "); $stmt->bind_param("i", $array['id']); $stmt->execute(); $stmt->close(); } } else { echo "Leer"; }
Mal 'ne grundsätzliche Manöverkritik.
Du holst dir in der Funktion test123
die Spalte „id“ aller Datensätze, in denen der Wert von datum
mehr als zwei Tage in der Vergangenheit liegt. Danach nimmst du das Array der in der Funktion ermittelten Datensätze und führst in einer Schleife über das Array jeweils eine Löschanfrage aus.
Das ganze Procedere funktioniert auch in einem einzigen Query. In dem ermittelst du mit einem Subquery die zu löschenden Datensätze und übergibst diese Liste in die WHERE-Klausel des Hauptquerys, der diese Datensätze löschen soll.
DELETE FROM warenkorb
WHERE id IN(
(SELECT id FROM warenkorb WHERE DATE(FROM_UNIXTIME(datum)) > NOW() - INTERVAL 2 DAY)
);
Da in der Abfrage keine variablen Werte vorhanden sind, ist nicht mal ein Parameter zu binden. Weiterhin kann der PHP-Code hier stark vereinfacht werden, da entweder die Funktion oder, bei Behalt der Funktion, die Ergebnisverarbeitung wegfällt.
Tschö, Auge
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett