Frage von Mezzo21, 30

Wie speichere ich mehrere Variablen in einem Array im Array?

Im ersten Schritt soll der "Warenkorb" ausgelesen werden. Dazu nutze ich folgenden Code:

$sql = "SELECT * FROM shoppingcart WHERE userid='".$loginnames."'"; $stmt = sqlsrv_query( $conn, $sql );

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { $pid = $row['ean']; }

Jetzt sollen alle Produktinfos abgefragt werden:

$sql = "SELECT * FROM products WHERE barcode='".$pid."'"; $stmt = sqlsrv_query( $conn, $sql );

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { echo $row['name']; }

Mein Problem: Die Variable "$pid" speichert nur einen Wert, statt der in der Tabelle "shoppingcart" angebebenen 2 Zeilen. Wie speichere ich hier mehrere Variablen?

Danke für eure Mithilfe

Antwort
von Suboptimierer, 12

Ich würde versuchen, in $pid den Zeilenumbruch durch einen Platzhalter zu ersetzen (z. B. |) und dann eine Replace-Funktion im SQL auf die Spalte barcode anzuwenden, sodass weder links noch rechts vom Gleichheitszeichen ein Zeilenumbruch vorkommt.

Pseudocode:

...WHERE Replace(barcode, '\n', '|') = '" . str_replace($pid, "\n", "|") . "'"...

Die genauen Ersetzungsbefehle und das Zeichen für den Zeilenumbruch musst du dir noch der Sprache entsprechend heraussuchen.

Antwort
von safur, 15

Du könntest dir einen Join bauen.

Bei der Abfrage
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { $pid = $row['ean']; }
Flitzt er zeilenweise alle Werte durch, du merkst dir aber nur den letzten.

Es wäre wohl sinnvoll im Bauch dieser Abfrage weiterzumachen.

Alternativ kannst du dir auch mal "next_result" ansehen:
http://php.net/manual/en/function.sqlsrv-next-result.php

Kommentar von Mezzo21 ,

Im Bauch weitermachen war auch meine Idee, aber auch hier wird nur mit dem letzten Datensatz aus dem Array weitergemacht :(

Kommentar von safur ,

Klar geht das :-)

Was macht er denn wenn du z. B.

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { echo $row[0]; }

machst?

Ich meine du hast mehrere Möglichkeiten. Du könntest dir auch die "num_rows" holen und dann per For-Schleife durchgehen.

http://php.net/manual/de/function.mysql-num-rows.php

Antwort
von maximilianus7, 4

gar nicht: der 2. abschnitt (jetzt sollen alle Produktinfos abgefragt werden) kommt in die 1. while schleife.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten