Supportnet Computer
Planet of Tech

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...

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

Antwort 3 von semi

Am besten gleich alles kopieren.

/*
* 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:

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.
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!



Antwort 8 von semi

Die funktion steht doch in Antwort 3.

<?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 :-((

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.

???

Antwort 11 von Barbi

Hi,

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
$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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: