• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mysql_fetch_array() -> array ausgeben

T!P-TOP

Mitglied
Guten Abend Leute,

in einer Funktion xyz passiert folgendes:
PHP:
    public function xyz()
    {
        $this->setSql("SELECT * FROM `tabelle`");
        return $this->mysqlFetchArray();        
    }

Diese Funktion rufe ich in einer andere Funktion namens blabla auf:

PHP:
public function blabla()
{
    $this->view->displayView($this->model->xyz());
}
Die Funktion "blabla" ruft die Funktion displayView auf und gibt als Paramter den Rückgabewert der Funktion "xyz" mit. Die FUnktion "xyz" gibt als return Wert mysql_fetch_array(mysql_query("SQL STATMENT")); zurück.

Die displayView Methode soll nun das durch mysql_fetch_array zustande gekommene Array ausgeben.

Nehmen wir an, in dem sql statement frage ich die Felder von 3 Spalten ab.
Wie muss nun diesplayView das übergebene Array ausgeben?

Habe es so versucht, funktioniert allerdings nicht:

PHP:
public function displayView($dasArray)
{
      $amount = count($dasArray);
      for ($i = 0; $i < $amount; $i++)
      {    
            echo $dasArray['spalte1'][$i].'<br />';    
            echo $dasArray['spalte2'][$i].'<br />';    
            echo $dasArray['spalte3'][$i].'<br />';                      
      }
}


Hab bisher ehrlich gesagt noch nie ein Array auf diese Art und Weise ausgeben müssen, daher bin ich auch etwas ratlos und da ich heut schon ziemlich K.O. bin, komme ich einach nicht mehr auf den Lösungsweg :sad:

Falls mir also da noch einer auf die Sprünge helfen kann -> dankeschön.

Grüße
 
Hallo T!P-TOP,

ich weiß jetzt nicht, nach welchem Schema dein mysqlFetchArray() die Werte zurückgibt, aber bei mysql_fetch_array() ist - soweit ich mich erinnere - die Datensatznummer in der ersten Dimension und die Spalten in der zweiten.
Sprich anstatt...
PHP:
            echo $dasArray['spalte1'][$i].'<br />';    
            echo $dasArray['spalte2'][$i].'<br />';    
            echo $dasArray['spalte3'][$i].'<br />';
versuch's mal mit...
PHP:
            echo $dasArray[$i]['spalte1'].'<br />';    
            echo $dasArray[$i]['spalte2'].'<br />';    
            echo $dasArray[$i]['spalte3'].'<br />';

Ansonsten, siehe die Struktur des Feldes mal an, dürfte aufklären. :) - var_dump($dasArray);

Gruß
 
Hallo und danke erstmal,

funktioniert aber auch leider diese Variante nicht.

Meinst du mit Schema Assoziativ oder Nummerisch? Ich nehme mal an beides, denn ich gebe diesen Parameter erst gar nicht an.
Bekomme übrigens einige Notices:
Notice: Undefined offset: 5 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 37


Notice: Undefined offset: 5 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 38


Notice: Undefined offset: 5 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 39


Notice: Undefined offset: 5 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 40


Notice: Undefined offset: 6 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 37


Notice: Undefined offset: 6 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 38


Notice: Undefined offset: 6 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 39


Notice: Undefined offset: 6 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 40


Notice: Undefined offset: 7 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 37


Notice: Undefined offset: 7 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 38


Notice: Undefined offset: 7 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 39


Notice: Undefined offset: 7 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 40


Notice: Undefined offset: 8 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 37


Notice: Undefined offset: 8 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 38


Notice: Undefined offset: 8 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 39


Notice: Undefined offset: 8 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 40


Notice: Undefined offset: 9 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 37


Notice: Undefined offset: 9 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 38


Notice: Undefined offset: 9 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 39


Notice: Undefined offset: 9 in /var/www/vhosts/nicolas-pecher.com/httpdocs/admincp/modules/webpages/views/webpagesView.php on line 40
Die beziehen sich alle auf die ausgaben der Array Felder in der for-Schleife.

Grüße
 
Ah, dadurch dass du den zweiten Parameter für assoziativ/numerisch nicht übergibst, sind beide im Array. Sprich es gibt doppelt so viele Array-Einträge, wie es numerische Indizes gibt (der Rest ist ja assoziativ). Dadurch zeigt $i ab '5' auf einen ungesetzten Eintrag. Das dürfte die Notices erklären. » Setze den Parameter auf MYSQL_ASSOC oder nutze mysql_fetch_assoc().

Werden die anderen Einträge ausgegeben?
Was gibt ein var_dump($dasArray); aus?
 
Ich nutzt nun mysql_fetch_assoc:
PHP:
    protected function mysqlFetchAssoc()
    {
        return mysql_fetch_assoc(mysql_query($this->sql)); 
    }


Hier ist die Funktion für die Abfrage:
PHP:
    public function dodo()
    {
        $this->setSql("SELECT `spalteEins`, `spalteZwei`, `spalteDrei`, `spalteVier`, `spalteFuenf` FROM `datenbankTabelle`");
        return $this->mysqlFetchAssoc();        
    }

Den return Wert der Funktion dodo wird an die Funktion display als Parameter geleitet und sollte dort ausgegeben werden:
PHP:
 public function display($datas)
 {             
            $amount = count($datas);
            for ($i = 1; $i < $amount; ++$i)
            {    
                echo $datas['spalteEins'].'<br />';                
                echo $datas['spalteZwei'].'<br />';                    
                echo $datas['spalteDrei'].'<br />';    
                echo $datas['spalteVier'].'<br />';    
                echo $datas['spalteFuenf'].'<br /><br /><br /><br />';                    
            }        
 }
Gebe ich $amount aus, erhalte ich 5, obwohl das Array 7 Datensätze beinhalten sollte. Woran könnte das liegen?

Derzeit gebe ich ja in der Forschleife nur den ersten Datensatz aus. Wie kann ich auf die anderen Zugreifen, wo ich doch jetzt nur noch Assoziative Arrays erhalte - mit Nummern geht das jetzt ja wohl kaum?


var dump:
array(5) { ["spalteEins"]=> string(2) "33" ["spalteZwei"]=> string(4) "test" ["spalteDrei"]=> string(6) "setset" ["spalteVier"]=> string(3) "php" ["spalteFuenf"]=> string(6) "setset" }
 
Bei der assoziativen Rückgabe kannst du einfach eine foreach-Wiederholung machen.
PHP:
 public function display($datas)
 {             
            foreach ($datas as $line)
            {    
                echo $line['spalteEins'].'<br />';                
                echo $line['spalteZwei'].'<br />';                    
                echo $line['spalteDrei'].'<br />';    
                echo $line['spalteVier'].'<br />';    
                echo $line['spalteFuenf'].'<br /><br /><br /><br />';                    
            }        
 }
 
Das habe ich bereits getestet - aber da kommt eine totaler Unsinn raus - immer nur der Anfangsbuchstabe und immer nur von der ersten Zeile der Datenbanktabelle.
Hättest Du noch ne Idee was ich versuchen könnte?

//EDIT:
gut, wenn ich mich jetzt nich irre, würde ich mal sagen, das überhaupt nur ein Datensatz abgeholt wird, bzw. wird nur der ersten Datensatz gespeichert!?
 
Zuletzt bearbeitet:
Hm, das kann ich mir auch nicht erklären.
Was du noch probieren könntest wäre, den zweiten Parameter von mysql_fetch_array() auf MYSQL_NUM zu setzen und dann wieder die for-Schleife zu verwenden.
 
Ok ich glaube, ich habs. Es wird derzeit nur ein Datensatz abgefragt.
Möchte ich alle haben, muss ich in der Funktion, die das ergebnis von mysql_fetch_assoc zurück liefert noch vorher mit einer while schleife jeden Datensatz in ein array mittels array_push übertragen. Das array gebe ich dann zurück.
 
Das das so umständlich nur geht, war mir gar nicht bewusst.
Hier nochmal die Lösung, falls jemand mal ebenfalls eine Array aus Datensätzen an eine weitere Funktion weitergeben möchte:
PHP:
    protected function mysqlFetchArray()
    {
        $fetchedArray = array();
        $query = mysql_query($this->sql);
        while ($line = mysql_fetch_array($query, MYSQL_ASSOC))
        {
            array_push($fetchedArray, $line);
        }
        return $fetchedArray;
    }
Im $fetchedArray befinden sich nun alle Datensätze. Liefert man stattdessen nur return mysql_fetch_array($query); zurück, wird nur der erste Datensatz zurückgegeben.
 
Zurück
Oben