ubuntuusers.de

mit select und mysql fetch_array ein array füllen

Status: Ungelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

hanseate82

Anmeldungsdatum:
18. Januar 2010

Beiträge: 216

Hallo.

Ich versuche seit geraumer Zeit, meine DB-Abfragen etwas umzubauen, und zu verbessern. (nicht 2,3 mal hintereinander abfragen für 1 php-seite). Nun versuche ich, statt mit while und fetch-object, und in derselben schleife gleich mit echo ausgeben, die DB mit fetch_array abzufragen. Und mehrere, gleichartige Ausgaben in dem Array zu speichern, so dass ich es auf der ganzen php-seite verfügbar habe um es an den gewünschten stellen anzuzeigen.

bis jetzt sehen die versuche so in der Art aus:

$result = mysql_query("SELECT * FROM tabellenname WHERE id = '$id'");
$pers = array();
$i = 0;
while ($row = mysql_fetch_array($result)){
       $pers[$i] = $row["spalte"];
       $i++;
       }

und dann

echo $pers;

oder

echo $pers[$i];

aber es wird nur ein treffer ausgegeben. (z.b. "gabi") statt ("gabi peter klaus dietmar")

wie stellt man es an, arrays mit select anfragen zu füllen, und quasi zu speichern, um sie später ausgeben zu können?

danke sehr, mfg, h.

Onkel_Judith

Avatar von Onkel_Judith

Anmeldungsdatum:
12. April 2008

Beiträge: 420

Wohnort: Hessen

Huhu,

ich nehme mal an es geht um PHP der Syntax nach? Und als nächstes hoffe ich, dein Problem richtig verstanden zu haben 😉

Du schränkst in deiner MySQL-Abfrage das Ergebnis ja auf nur einen Wert ein, indem du die Bedingung id=x angibst. Dadurch kann ja immer nur ein Wert zurück gegeben werden. Falls du das weglässt, solltest du alle möglichen Werte in deinem Array haben. Dann kannst du mit

echo $pers[x1];
echo $pers[x2];
...

auf die einzelnen Werte zugreifen. Bitte korrigier mich, falls ich was falsch verstanden hab ☺

LG

hanseate82

(Themenstarter)

Anmeldungsdatum:
18. Januar 2010

Beiträge: 216

Hallo.

Ja es ist php..

Also ich habe in der Tabelle URLs/ bzw. Links zu Bildern, damit ich auf der Homepage einfacher z.b. alle Bilder aus dem Jahr 2001 anzeigen kann. (als Beispiel: zeige alle Bilder aus dem jahr 2001 .. usw)

Oder halt, beispielsweise, alle anzeigen mit der ID 231. Und aus den gefundenen Reihen, will ich dann Beispielsweise den Ort haben.

z.b. 231 - München 231 - Berlin

80 - Köln 80 - Husum 80 - usw.

usw.

im Endeffekt sollen dann z.b. diese Orte in einem Array gespeichert werden, damit ich dann z.b. schreiben kann

<title>ID 231 : <?php echo $array; ?> </title>

um zu bekommen:

ID 231 : München, Berlin, Weimar

ich wollte versuchen alle "treffer" in der Datenbank in eine Variable zu kriegen. (array(?)) statt wie sonst, die Treffer gleich auszugeben in der While schleife.

while (row = mysql_fetch_object($abfrage)){
      $url = $row->url;
      $ort = $row->ort;
      $jahr = $row->jahr;   
      echo "<img src=\"".$url."_.jpg\" />";
      echo "<br />";
      echo "Ort: ".$ort." - Jahr: ".$jahr;

also was ich eig. "bauen" will, ist sowas wie ein array (keine ahnung von arrays):

$ort[0] = weimar;
$ort[1] = rostock;
$ort[2] = magdeburg;

und das ganze dann in einem rutsch ausgeben:

print "$ort;"; 

um zu bekommen:

weimar, rostock, magdeburg

wobei mir schleierhaft ist, wo ich dann die kommas herkriege. wahrscheinlich hab ich einen grundlegenden denkfehler, oder falsches DB-Design 😐

thx dennoch

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

hanseate82 schrieb:

Hallo.

Ich versuche seit geraumer Zeit, meine DB-Abfragen etwas umzubauen, und zu verbessern. (nicht 2,3 mal hintereinander abfragen für 1 php-seite). Nun versuche ich, statt mit while und fetch-object, und in derselben schleife gleich mit echo ausgeben, die DB mit fetch_array abzufragen. Und mehrere, gleichartige Ausgaben in dem Array zu speichern, so dass ich es auf der ganzen php-seite verfügbar habe um es an den gewünschten stellen anzuzeigen.

bis jetzt sehen die versuche so in der Art aus:

$result = mysql_query("SELECT * FROM tabellenname WHERE id = '$id'");

Das riecht stark nach SQL-Injection-Anfälligkeit. Ich hoffe, du stellst vorher sicher, dass $id ein Integer ist. Gibt es einen Grund, weshalb du mysql_* Funktionen verwendest statt PDO und Prepared Statements? Oder besser gleich ein Web-Framework. Für PHP gibt es z.B. CakePHP. Dann kannst du sowas machen wie $this->Person->findById($id).

Oder halt, beispielsweise, alle anzeigen mit der ID 231. Und aus den gefundenen Reihen, will ich dann Beispielsweise den Ort haben.

z.b. 231 - München 231 - Berlin

80 - Köln 80 - Husum 80 - usw.

Dann ist ID eigentlich eine Fremdschlüsselbeziehung? In dem Fall würde ich es anders nennen.

while (row = mysql_fetch_object($abfrage)){
      $url = $row->url;
      $ort = $row->ort;
      $jahr = $row->jahr;   
      echo "<img src=\"".$url."_.jpg\" />";
      echo "<br />";
      echo "Ort: ".$ort." - Jahr: ".$jahr;

Hier vermischst du Logik und Präsentation. Die Datenbankabfrage sollte nicht in der View stattfinden, sondern im Controller und das Ergebnis als Model an die View gegeben werden.

und das ganze dann in einem rutsch ausgeben:

print "$ort;"; um zu bekommen:

weimar, rostock, magdeburg wobei mir schleierhaft ist, wo ich dann die kommas herkriege.

Bei vielen Programmiersprachen gibt es eine join-Methode für ein Array, z.B. ort.join(', '). In PHP sind Arrays keine Objekte und haben keine Methoden, dort heißt es: implode(', ', $ort)

hanseate82

(Themenstarter)

Anmeldungsdatum:
18. Januar 2010

Beiträge: 216

hallo.

Das riecht stark nach SQL-Injection-Anfälligkeit. Ich hoffe, du stellst vorher sicher, dass $id ein Integer ist. Gibt es einen Grund, weshalb du mysql_* Funktionen verwendest statt PDO und Prepared Statements? Oder besser gleich ein Web-Framework. Für PHP gibt es z.B. CakePHP. Dann kannst du sowas machen wie $this->Person->findById($id).

naja ich bin ziemlicher anfänger. html, css, bisschen php + mysql. da muss ich mich erstmal belesen. pdo, prepared statements, cake php etc. etc.. ❓ alles unbekannte begriffe für mich. ich versuche nur das zu verwenden, was ich auch einigermaßen verstehe/nachvollziehen kann....(was noch nicht so viel ist..)

aber danke, die antwort gibt einige anregungen/ "forschungsziele" 💡 mfg, h. 👍

Antworten |