2016-12-12 2 views
0

Ich bin sehr neu zu PDO SQL-Abfragen. Ich habe den folgenden Code, der gut funktioniert. Wenn das Ergebnis nur 1 Zeile zurückgibt, möchte ich diese Zeile auf valid = FALSE" setzen. Wie mache ich das?Neue SQL-PDO-Abfrage von Ergebnis

$sql = "SELECT * FROM `passcodes` WHERE `passcode` = '$passcode' AND `valid` = TRUE"; 
$stmt = $DBcon->prepare($sql); 
$stmt->execute(); 
$count = $stmt->rowCount(); 
if($count == 1) { 
    //do this 
} else { 
    //do that 
} 
+2

Sie verwenden bereits 'prepare()' - warum nicht Platzhalter für Variablen verwenden und somit SQL Injection verhindern? Davon abgesehen müssen Sie nur eine Aktualisierungsabfrage ausführen, wenn die Anzahl 1 ist. – Qirel

+0

Bitte [lernen, wie man PDO richtig verwendet] (https://phddelusions.net/pdo#prepared) –

+0

PDO ist kein Framework oder ein ORM. Es ist lediglich eine Bibliothek, um normalen SQL-Code auszuführen. –

Antwort

1

Ich möchte dann diese Zeile gültig setzen = FALSCH“. Wie kann ich das tun?

das ist, was SQL ist für.

$sql = "UPDATE `passcodes` SET `valid` = FALSE WHERE `passcode` = ? AND `valid` = TRUE"; 
$DBcon->prepare($sql)->execute([$passcode]); 

das ist alles Code, den Sie brauchen.

+0

Was ist mit Abschnitt "sonst tun"? – artoodetoo

+0

Wenn das OP danach fragt, gibt es eine offensichtliche Lösung, die Sie ebenfalls beachten sollten. –

+0

@artoodetoo Op möchte nur, dass die SQL-Abfrage aktualisiert wird. Also, was ist dein Grund zu downvote wenn du es? –

-1

Dies wird mit der Zählung der Ergebniszeilen gleich oder größer als 1 Ich empfehle arbeiten Platzhalter für vorbereitete Anweisungen zu verwenden:

$sql = "SELECT `id` FROM `passcodes` WHERE `passcode` = ? AND `valid` = TRUE"; 
$stmt = $DBcon->prepare($sql); 
$stmt->execute([ $passcode ]); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
if($rows) { 
    //do this 
    $sql = "UPDATE `passcodes` SET `valid` = FALSE WHERE `id` = ?"; 
    $stmt = $DBcon->prepare($sql); 
    foreach ($rows as $r) { 
     $stmt->execute([ $r['id'] ]); 
    } 
} else { 
    //do that 
} 
+0

Ihre Update-Syntax ist falsch .. –

+0

Vielen Dank @MasivuyeCokile. behoben – artoodetoo

+0

* Was ist mit Abschnitt "sonst tun das"? * Das ist Ihre Frage auf jemandes Antwort, was ist auch in Ihrer Antwort? –

2

Noch eine andere Lösung.

IF Sie Interesse an "else" Abschnitt oben erwähnt, können Sie elegante Lösung von @ YourCommonSense mit der Überprüfung, wie viele Zeilen in UPDATE geändert wurde kombinieren. MySQL gibt solche Informationen zurück!

$sql = "UPDATE `passcodes` SET `valid` = FALSE WHERE `passcode` = ? AND `valid` = TRUE"; 
$DBcon->prepare($sql)->execute([$passcode]); 
if ($stmt->rowCount() == 0) { 
    // do this when nothing found 
}