Supportnet / Forum / Skripte(PHP,ASP,Perl...)
MySQL-Ausgabe in ein Array
Frage
Hallo,
wie kann ich einen MySQL-Abfrage in ein Array legen, so das eine Variable alle Datensätze enthält?
Danke!
Antwort 1 von Feuervogel
$sql = "SELECT * FROM tabelle";
$qry = mysql_query($sql);
$result = mysql_fetch_assoc($qry);
#die daten sind jetzt in dem assiozativen array $result
for ($i = 0; $i < count($result); $i ++)
{
echo $result['spaltenname'];
}
hoffe das war klar genug...
$qry = mysql_query($sql);
$result = mysql_fetch_assoc($qry);
#die daten sind jetzt in dem assiozativen array $result
for ($i = 0; $i < count($result); $i ++)
{
echo $result['spaltenname'];
}
hoffe das war klar genug...
Antwort 2 von Feuervogel
ODER du schreibst ab der 3. zeile inkl. was anderes:
while ($result = mysql_fetch_assoc($qry))
{
echo $result['spaltenname'];
}
zu dem thema folgender link:
http://de3.php.net/manual/de/function.mysql-fetch-assoc.php
while ($result = mysql_fetch_assoc($qry))
{
echo $result['spaltenname'];
}
zu dem thema folgender link:
http://de3.php.net/manual/de/function.mysql-fetch-assoc.php
Antwort 3 von semi
Am besten gleich alles kopieren.
Gruß,
Michael
/*
* Diese Funktion kopiert die Daten aus dem ResultSet in ein Array von Arrays.
Jede Zeile aus dem Resultset wird dabei als ein Hashmap gespeichert.
Die feldnamen aus der DB sind in Kleinbuchstaben konvertiert.
z.B. (zwei Zeilen)
array(
array(
name1_1 => value1_1,
name1_2 => value1_2
... usw.
),
array(
name2_1 => value2_1,
)
);
*/
function rs2array($rs) {
$result = array();
$fieldNames = array();
for($i=0; $i<mysql_num_fields($rs); $i++) {
$fieldNames[] = strtolower(mysql_field_name($rs, $i));
}
while($row=mysql_fetch_row($rs)) {
$rowData = array();
for($i=0; $i<count($fieldNames); $i++) {
$rowData[$fieldNames[$i]] = $row[$i];
}
$result[] = $rowData;
}
return $result;
}
Beispiel
function printOneRow($item, $key) {
echo " $key = $item<br>";
}
function printAllRows($item, $key) {
echo "{<br>";
array_walk($item, 'printOneRow');
echo "}<br>";
}
... Verbindung zur DB
...
$res = mysql_query("select * from whatever");
if(!mysql_errno()) {
$allRows = rs2array($res);
array_walk($allRows, 'printAllRows');
mysql_free_result($res);
}
else
echo mysq_error();
... Verbindung trennen
Gruß,
Michael
Antwort 4 von Barbi
Hi,
evtl. habe ich mich falsch ausgedrück, das Abfragen der Tabelle ist nicht das Thema. Ich muß nur noch aus den Daten einen kommaseperierten String machen:
Nun soll aus den $data ein String nach dem Muster $ydata = array(68,67,60,....);
werden.
Vielen Dank
evtl. habe ich mich falsch ausgedrück, das Abfragen der Tabelle ist nicht das Thema. Ich muß nur noch aus den Daten einen kommaseperierten String machen:
while ($row = mysql_fetch_array($result))
{
$data = $row["test"];
}
Nun soll aus den $data ein String nach dem Muster $ydata = array(68,67,60,....);
werden.
Vielen Dank
Antwort 5 von semi
Ersetze die Funktion printAllRows aus Antwort 3 durch das hier.
Gruß,
Michael
function printAllRows($item, $key) {
echo implode("\",\"", $item);
}
Vereinfachen kannst Du es sicher alleine.Gruß,
Michael
Antwort 6 von semi
Ups! Kleiner Fehler.
echo "\"" . implode("\",\"", $item) . "\"<br>";
oder
echo "\"" . implode("\",\"", $item) . "\"\n";
Antwort 7 von Barbi
Hi,
leider funzt das nicht sio richtig....
Fatal error: Call to undefined function: rs2array() in....
Trotzdem danke!
leider funzt das nicht sio richtig....
Fatal error: Call to undefined function: rs2array() in....
Trotzdem danke!
Antwort 8 von semi
Die funktion steht doch in Antwort 3.
Jetzt aber :-)
<?php
$db = mysql_connect(...) or die(mysql_error());
mysql_select_db(....);
if(!mysql_errno()) {
$error = mysql_error();
mysql_close($db);
die($error);
}
$result = mysql_query("select * from artikel");
if(!mysql_errno()) {
Header("Content-Type: text/plain");
$fieldNames = array();
for($i=0; $i<mysql_num_fields($result); $i++) {
$fieldNames[] = mysql_field_name($result, $i);
}
echo "\"" . implode("\",\"", $fieldNames) . "\"\n";
while($row=mysql_fetch_row($result)) {
echo "\"" . implode("\",\"", $row) . "\"\n";
}
mysql_free_result($result);
}
else
echo mysq_error();
mysql_close($db);
?>
Hier nochmals ein kompletter Code um die Ergebnisse einer Abfrage als CSV auszugeben. Die fett markierten Zeilen sind das, wonach du suchst.Jetzt aber :-)
Antwort 9 von Barbi
Danke es hat mich aber nicht wirklich weitergebracht......
Wie geagt das Ergebnis soll so aussehen:
Es aus den $data ein String nach dem Muster $ydata = array(68,67,60,....);
werden.
Scheint so, das ich mächtig auf dem Schlauch stehe :-((
Wie geagt das Ergebnis soll so aussehen:
Es aus den $data ein String nach dem Muster $ydata = array(68,67,60,....);
werden.
Scheint so, das ich mächtig auf dem Schlauch stehe :-((
Antwort 10 von semi
Willst Du PHP Code generieren oder was?
Ansonsten sind die Ergebniss, die in jeder Zeile ($row im Beispiel oben) stehen, bereits als Arrays verfügbar.
mysql_fetch_array holt doch ein Array, in dem alle Werte der jeweils aktuellen Zeile stehen.
???
Ansonsten sind die Ergebniss, die in jeder Zeile ($row im Beispiel oben) stehen, bereits als Arrays verfügbar.
mysql_fetch_array holt doch ein Array, in dem alle Werte der jeweils aktuellen Zeile stehen.
???
Antwort 11 von Barbi
Hi,
ich habe hier den entsprechenden Code mal reingeschrieben. Mit der auskommentierten ydata funktioniert alles tadellos.
Wo ist mein Denkfehler?
Normalerweise müsste die $ydata nach der Datenbankabfrage doch genau dieses gewünschte Array ergeben.
Danke!
ich habe hier den entsprechenden Code mal reingeschrieben. Mit der auskommentierten ydata funktioniert alles tadellos.
$query = "SELECT `test` FROM `testdb` WHERE KUNDE = '$PHP_AUTH_USER' ORDER BY `DATUM` ASC";
$result = @mysql_query($query);
$ydata = mysql_fetch_array($result);
//$ydata =array( 55,60,70);
$graph = new Graph(350,300);
$graph->SetScale("textlin",50,120);
$graph->title->Set('Gewichtsverlauf');
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$line = new LinePlot($ydata);
$graph->Add($line);
$graph->Stroke();
Wo ist mein Denkfehler?
Normalerweise müsste die $ydata nach der Datenbankabfrage doch genau dieses gewünschte Array ergeben.
Danke!
Antwort 12 von semi
Die Abfrage liefert mehrere Datensätze und Du fragst nur einen einzelnen ab.
mysql_fetch_array liest NUR EINE Zeile. Die einzelnen Feldwerte der Zeile sind in dem Array drin (deswegen heißt es auch fetch_array).
Im obigen Beispiel hast Du dann NUR EINEN Eintrag. (z.B. array(5))
Ersetze
Gruß,
Michael
mysql_fetch_array liest NUR EINE Zeile. Die einzelnen Feldwerte der Zeile sind in dem Array drin (deswegen heißt es auch fetch_array).
Im obigen Beispiel hast Du dann NUR EINEN Eintrag. (z.B. array(5))
Ersetze
$ydata = mysql_fetch_array($result);
durch$ydata = array();
while($row=mysql_fetch_row($result)) {
$ydata[] = $row[0];
}
Gruß,
Michael
Antwort 13 von Barbi
Hi,
ich könnte mir wohin beißen.....
Da hätte ich auch selbst darauf kommen sollen.....
Naja, manchmal ist der Schlauch halt sehr dick, auf den man steht ;-)
Danke!
ich könnte mir wohin beißen.....
Da hätte ich auch selbst darauf kommen sollen.....
Naja, manchmal ist der Schlauch halt sehr dick, auf den man steht ;-)
Danke!