2016-07-03 614 views
-2

Ich habe versucht eine Vielzahl von verschiedenen möglichen Antworten durch vorherige Frage auf dieser Seite und andere vergeblich vorgeschlagen. Eine funktionierende Lösung (siehe Code unten) für die Auswahl mehrerer Zeilen mit einer SELECT-Anweisung und Vermeidung von sql injectio, definiert die Anzahl der IDs mit IN(), d. H. IN (?,?). Das Problem mit dieser Lösung ist, ich weiß nicht, wie man die Anzahl der "?" innerhalb von IN, da es basierend auf der Abfrage unterschiedlich sein könnte. Ich habe nach einer Lösung gesucht, die mit IN (?) Funktioniert, die mehrere IDs verarbeiten kann. Ich vermute die Art, wie ich dies eingerichtet habe mit IN und WHILE, dass Fetch() funktioniert zum Abrufen mehrerer Zeilen aber FetchAll() nicht, Wierd.SELECT mehrere Datensätze WHILE ID IN (?,?) Funktioniert, Suche nach einer PDO-Lösung mit IN (?)

Irgendwelche Gedanken darüber, wie man dies mit IN (?) Oder zwei zu arbeiten, einschließlich der richtigen Anzahl von "?" basierend auf der Abfrage.

Folgende Werke ...

$varID = "100, 118"; 
$ids = explode(',', $varID); 

$stmt = $conn->prepare('SELECT * FROM table WHERE id IN(?,?)'); 
$stmt->execute($ids); 
while($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    mail($result['contact']." <".$result['email'].">", "My Subject", "My Message", $headers); 
} 
+0

ähnliche [thread1] (http://stackoverflow.com/a/ 14767651/5447994), [thread2] (http://stackoverflow.com/a/920523/5447994) – Thamilan

+0

Wenn Sie eine unbekannte Anzahl von Bedingungen haben, müssen Sie die Anzahl der Bedingungen zur Laufzeit generieren: Schreiben Sie einen kleinen Blick, um zu generieren die '?' Liste (oder nur ein Array flattern), und verwenden Sie dann Ihre aktuelle While-Schleife –

+0

@Norbert van Nobelen - vielen Dank für Ihre Antwort. Basierend auf dem, was ich gelesen habe, ist es wichtig, einen Platzhalter in die Anweisung aufzunehmen, um die Injektion von SQL zu verhindern. Was denken Sie über Joaquin Cicetti? Können Sie eine Variable auf diese Weise sicher verwenden? – Spaceman

Antwort

0

$ ids = [ '1', '2', '3', ....];

"... WHERE id IN (" .implode (" " $ ids)."), Um durch ..."

+0

Danke für die Antwort. Enthält eine Variable in der Anweisung (wie Sie es definiert haben) einen Platzhalter, der gegen die SQL-Injektion sicher ist? – Spaceman

+0

@Spaceman natürlich ist es nicht sicher, was diese Antwort falsch und schädlich macht. –

+0

Wenn Sie diesen Code kopieren und einfügen ... offensichtlich ist es anfällig für injeccion, , aber die Antwort ist nicht schädlich. sollten Sie die Parameter überprüfen, um sql injeccion zu vermeiden ... –