2016-04-26 3 views
0

Ich bin mit einer PDO-Abfrage, so etwas wie:PHP, MySQL - Gibt zurück, welcher Wert verwendet wurde, wenn die Eingabe ein Array ist?

$inputArr = array(val1, val2, val3, ...); 

$qMarks = str_repeat('?,', count($inputArr) - 1) . '?'; 

$stmt = $db->prepare("SELECT id, name, type, level 
         FROM table 
         WHERE name IN ($qMarks)"); 

$stmt->execute($inputArr); 

... parse the rows that have been returned 

Und das funktioniert genau wie erwartet, kein Hang-ups oder sonst etwas.

Mein Problem ist, dass ich wissen muss, welcher Wert von $inputArr wurde verwendet, um jede Zeile zurückgegeben zu erhalten.

Ich habe versucht,

WHERE name IN ($qMarks) AS inputVal 

und

WHERE name IN ($qMarks AS inputVal) 

aber jene Absturz der Abfrage.

Wie kann ich feststellen, welcher Input-Array-Wert verwendet wurde, um jede Zeile in der Ausgabe zurückzugeben?

EDIT 1

Ja, ich verstehe, dass die Eingabe von Suchwert wäre name, für diesen speziellen Fall, aber die Abfrage oben ist nur zu Demonstrationszwecken, wie ich die Suchwerte in die Abfrage am Putten .

Die tatsächliche ist viel komplexer und gibt alle name Wert mit schließen (aber nicht immer identisch).

+1

Umm .. Wenn Sie die Zeile holen wäre es nicht in $ Zeile ['Name'] 'da das etwas in $ QMarks ??? – AbraCadaver

+0

@AbraCadaver ist es nicht so einfach. Die tatsächliche Abfrage verwendet eine benutzerdefinierte Funktion, um Namenswerte zurückzugeben, die * close *, aber nicht immer identisch sind, und zwei LEFT JOIN-Elemente enthalten. Dies dient nur der Veranschaulichung, wie ich die Suchwerte in die Abfrage einfüge. – Birrel

+0

Ja, das ist normalerweise nützliche Information im Voraus. – AbraCadaver

Antwort

0

Das Schlüsselwort AS funktioniert nicht so, wie Sie es erwarten. Es wird hauptsächlich für Aliasing-Unterabfragen verwendet. Sie können es (meines Wissens) nicht in einer WHERE Klausel verwenden.

Das von Ihnen beschriebene Szenario sollte den Namen in $row['name'] haben. Wenn es sich um eine andere Variable handelte, die Sie sehen wollten, fügen Sie sie einfach in Ihre SELECT-Klausel ein.

+1

Siehe Bearbeiten am Ende der ursprünglichen Frage. – Birrel

+0

Auch bei Unterabfragen und Joins sollten Sie weiterhin in der Lage sein, auszugeben, was in der SELECT-Klausel abgeglichen wurde. Vielleicht könnten Sie, wenn Sie eine Anfrage näher an das Geschehen richten, eine bessere Idee bekommen? – Ben

0

Große Frage und einfache Antwort:

Der WHERE name IN $qMarks)"); Teil des Codes nur die Werte in der Datenbank zu erhalten, die Ihre Array passen, also was Sie tun können, ist zu sehen, welche name Werte vorhanden sind in der Zeile, die du geholt hast. Zum Beispiel:

$rows_fetched = $stmt->fetchAll(PDO::FETCHASSOC); 

$inputArray = array(); 

foreach($rows_fetched as $value) 
{ 
    $inputArray[] = $value['name']; 
} 

print_r($inputArray);//printing the results 

Jetzt haben Sie die Array $inputArray mit allen Werten verwendet, um jede Zeile in der Ausgabe zurückzukehren. Lass mich wissen, ob das für dich funktioniert hat!

Verwandte Themen