phpbar.de logo

Mailinglisten-Archive

[php] Skript hängt sich auf beim Array füllen[]

[php] Skript hängt sich auf beim Array füllen[]

Michael Borchers list at tridemail.de
Mon Jan 8 10:03:06 CET 2007


> Hallo Michael,
>
> Michael Borchers wrote:
>>   $table_array = array();
>>
>>   while($table_row = mysql_fetch_array($this->db_result))
>>   {
>>    foreach($this->mysql_num_fields_array as $field)
>>    {
>>     $table_array[][$field] = $table_row[$field];
>>    }
>>   }
>
> Wie soll denn das $table_array am Ende aussehen?
> Assoziativ mit Feldnamen oder indiziert mit Feldnummern?
>
> Laut Handbuch zu mysql_fetch_array:
>
> "mysql_fetch_array() ist eine erweiterte Version von mysql_fetch_row(). 
> Die
> Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays 
> abgelegt,
> als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen
> Indizes werden die Feldnamen benutzt."
>
> "Das optionale zweite Argument Ergebnistyp in mysql_fetch_array() ist eine
> Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM 
> und
> MYSQL_BOTH. Diese Eigenschaft steht seit PHP 3.0.7 zur Verfügung. 
> MYSQL_BOTH
> ist der Standard für diesen Paramater."
> Da MYSQL_BOTH als Standard definiert ist, wird $table_row folglich beide
> Schlüsseltypen enthalten und eignet sich daher noch nicht zur direkten
> Übernahme.
>
> Vorschlag von mir:
>
> $table_array = array();
>
> while($table_row = mysql_fetch_array($this->db_result))
> {
>    /* lass dir zur Kontrolle und damit du ein Gefühl für den
>    Inhalt des Arrays bekommst dieses mal ausgeben */
>    echo '<pre>';
>    print_r($table_row);
>    echo </pre>';
>
>    $row = array(); // eigenes Array für die endgültige Zeile
>    foreach($this->mysql_num_fields_array as $field)
>    {
>        $row[$field] = $table_row[$field]; // je Zeile ein Array aufbauen
>    }
>    $table_array[] = $row; // die Zeile hinten an das $table_array anhängen
> }
>
> Falls du den Parameter MYSQL_ASSOC verwendest könntest du die
> $table_row direkt übernehmen, ohne die Fields extra anzufassen.
>
>
> $table_array = array();
>
> while($table_row = mysql_fetch_array($this->db_result))
> {
>    $table_array[] = $table_row; // die Zeile hinten an das $table_array
> anhängen
> }
>
>> Wie genau entsteht dieser Fehler?!
>
> In deinem fehlerhaften Verständnis der kurzen Schreibweise
> von $array[] = 'foo';
>
>>     $table_array[][$field] = $table_row[$field];
>
> Schau mal mit print_r in das Array $table_array bei jedem Durchlauf.
> Du fügst an dieses Array nicht nur je MySQL-Zeile einen neuen Eintrag
> hinten an, sondern auch noch je Spalte.
> Als Ergebnis sieht dein Array dann wohl so aus:
> $table_row[0]['Vorname'] = 'Max';
> $table_row[1]['Nachname'] = 'Mustermann';
> $table_row[2]['Alter'] = '40';
> $table_row[3]['Anrede'] = 'Herr';
> $table_row[4]['Vorname'] = 'Mario';
> $table_row[5]['Nachname'] = 'Müller';
> $table_row[6]['Alter'] = '30';
> $table_row[7]['Anrede'] = 'Herr';
>
> Ich nehme aber an, dass du eher folgendes planst:
> $table_row[0]['Vorname'] = 'Max';
> $table_row[0]['Nachname'] = 'Mustermann';
> $table_row[0]['Alter'] = '40';
> $table_row[0]['Anrede'] = 'Herr';
> $table_row[1]['Vorname'] = 'Mario';
> $table_row[1]['Nachname'] = 'Müller';
> $table_row[1]['Alter'] = '30';
> $table_row[1]['Anrede'] = 'Herr';
>
> regards, Ringo

ihr habt natürl. recht, mir fällt auch grad auf, dass das total doppel 
gemoppelt war.
ich wollte ein while($row=mysql_fetch_array...) in ein fertiges array 
schreiben,
habe dabei über einen umweg erst die feldername ausgelesen und die dann 
gefüllt.
so ein blödsinn aber auch, den ein einfaches:
  while($table_row = @mysql_fetch_array($this->db_result, MYSQL_ASSOC))
  {
   $table_array[] = $table_row;
  }

hätte ja gereicht;) wer keine arbeit hat, der macht sich welche...
das rad neue erfunden sozusagen!

der browserabsturz kam anscheinend zustanden weil der virtuelle server 
merkte,
dass die mysql-abfrage zu riesig war. denn bei einem result mit mehr als 
1000
einträgen kann das mal leicht passieren;)

danke für die mühe! 


php::bar PHP Wiki   -   Listenarchive