Array-Werte aus MySQL-Datenbank abfragen

aphaean

Mitglied
Goodafternoon Ladies and Gentlemen!

Folgendermassen mein Problem:

Ich habe ein Array mit mehreren Werten, die als ID (Primärschlüssel) Werte in einer MySQL Tabelle wieder zu finden sind. Nun möchte ich sämtliche dazugehörigen Werte aus der Tabelle ('name' 'lieblingsfarbe') ausgeben - für sämtliche Werte des Arrays.

Leider ist mein Verständnis von PHP und MySQL noch in den Kinerschuhen, und ich sehe als Lösung alleine eine while Schleife:

PHP:
$tabellenname = "mitglieder";
$link=mysql_connect("...", "...", "...");

$i=0;
while($i<=count($_GET['idarray']))
{

echo $_GET['idarray'][$i];  

$sql="SELECT name, lieblingsfarbe FROM $tabellenname WHERE (id=$_GET['idarray'][".$i."]";

$output = mysql_select_db("...", $link);

/* Hier müsste jetzt eine Ausgabe der Werte 'name' und 'lieblingsfarbe' kommen */

$i=$i+1;
}

1. Gibt es hierzu eine elegantere Alternative? Ohne mehrfach Queries an die Datenbank zu schicken?

2. Wenn dies nicht der Fall ist, wie lautet der Code-Schnipsel um die Werte 'name' und 'lieblingsfarbe' auszugeben - oder wie packe ich die Werte in ein Array?


cheerio,
anna
 
Ich glaube, da gibt es in MYSQL etwas, dass nennt sich IN

PHP:
$tabellenname = "mitglieder"; 
$link=mysql_connect("...", "...", "..."); 
mysql_select_db("...", $link); 

$in = "";
for($i=0;$i<count($_GET['idarray']);$i++)
{
     $in .= $_GET['idarray'][".$i."].", ";
}

$in = substr($in, 0, -1);

$sql="SELECT name, lieblingsfarbe FROM ".$tabellenname." WHERE id IN(".$in.")"; 
$result = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_assoc($result))
{
    print_r($row);
    echo "<hr>";
}

Bin mir nicht sicher, ob das so stimmt. Schau mal, ob du damit zurecht kommst.
 
Probier mal Folgendes:
PHP:
$query = '
	SELECT
	        `name`,
	        `lieblingsfarbe`
	  FROM
	        `'.$tabellenname.'`
	  WHERE
	        `id` IN ('.implode(', ', array_map('intval', $_GET['idarray'])).')
	';
Damit werden alle Werte des Arrays in einer Abfrage aufgenommen.
 
Hallo Gumbo!

Erstmal - danke für Deinen Input.

Nach Deiner $sql habe ich folgenden Code eingefügt:

PHP:
$link=mysql_connect("...", "...", "...");
mysql_select_db("...", $link);

$result = mysql_query($sql, $link); 
			 
for ($i=0; $i<mysql_num_rows($result); $i++)
{
$ergebnis[$i] = mysql_fetch_array($result);
}

for ($i=0;$i<count($ergebnis);$i++)
{
/*Ausgabe der Werte*/;			
}

Die Werte werden jedoch im Browser nicht angezeigt :(. Das idarray existiert, ich habe es mir vorsichtshalber immer vorher ausgeben lassen. Folgende Fehlermeldung wird ausgegeben:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ...on line 31

Auch habe ich leider nichts über das IN in der mysql Query finden können - soll aber nichts heissen.

*deprimiert*

anna
 
Zuletzt bearbeitet:
Hallo Fanste

Auch Dir, danke für die Hilfe ...

Habe deinen Vorschlag eingefügt, und bekomme als Fehlermeldung folgendes zurück:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' ,)' at line 1

Ich habe leider keine Ahnung was das bedeuten soll *dummfühl*

anna
 
Ich habe die Abfragedefinition in meinem Vorschlag in der $query- und nicht der $sql-Variable gespeichert. Ich hoffe, du hast das in deinem Versuch berücksichtigt. Übrigens bin ich davon ausgegangen, dass alle Werte des Arrays numerisch sind.
 
irgs... sowas muss man mir doch sagen ;) ... wir haben jetzt auf ganzer linie $query - aber trotzdem spukt der Leviathan immer noch:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource ... etc

aus.

Die Werte des idarrays sind alle numerisch - die Werte das arrays welches von der Datenbank geliefert werden sind wiederum bunt gemischt.

*seufz*

anna
 
1103: Incorrect table name ''.mitglieder.''

Die Tabelle existiert - und andere Zugriffe (dh. anders formulierte SQL Queries) stellen kein Problem dar.

Ich hatte bisher bereits Probleme mit Anführungszeichen in den SQL Queries (so meldet er bsp. bei $_GET[ ' beispiel ' ] einen Fehler, aber bei $_GET[ beispiel ] nicht) - also habe ich den Tabellennamen jetzt direkt in die Querie reingeschreiben. Das Ergebnis ist eine neue Fehlermeldung:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'intval', Array)).')' at line 11

*ausgesprochenverwirrtguck*

anna
 
Hast du meinen Vorschlag denn eins-zu-eins übernommen oder hast du ihn noch verändert?
 
Zurück