peschels: Frage zu PHP-Variablen

Hallo zusammen,

ich habe eine (für die meisten wahrscheinlich einfache) Frage:

  
        $i = 11;  
  
        $tmp = "$row->s_";    // 1.  
	$tmp.=$i;  
	echo $tmp;  
  
	echo $row->s_11;     // 2.  

Warum ist das Ergebnis nicht identisch? Bzw. wie schaffe ich es, einen dynamischen Zugriff auf meine Datenbank zu erstellen?
Zur Erläuterung:
In der Datenbank steht unter $row->s_11 ein name, als Ergebnis bekomme ich bei der 1.) Variante eine integer-Zahl, bei Variante 2) jedoch das gewünschte ergebnis.

Danke schonmals für eure Hilfe.
Gruß peschels

  1. Hi,

    In der Datenbank steht unter $row->s_11 ein name, als Ergebnis bekomme ich bei der 1.) Variante eine integer-Zahl,

    Stelle bitte das error_reporting vernünftig ein (E_ALL & display_errors auf 1).

    bei Variante 2) jedoch das gewünschte ergebnis.

    Schön, dann nimm die.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hi!

    ich habe eine (für die meisten wahrscheinlich einfache) Frage:

    Nein, das ist schon ein wenig kniffliger.

    $i = 11;

    $tmp = "$row->s_";    // 1.
    $tmp.=$i;
    echo $tmp;

    echo $row->s_11;     // 2.

    
    >   
    > Warum ist das Ergebnis nicht identisch?  
      
    Betreibe Debugging! Stell das error\_reporting auf E\_ALL (und display\_errors auf on) - das sollte man beim Entwicklen immer haben. Du bekommst dann eine ansonsten nicht angezeigt Notice wegen "Undefined property ... s\_". Beachte die Unterschiede bei der Variablennamenbehandlung innerhalb von ""- und ''-Strings. Wenn du mit var\_dump($tmp) das Ergebnis der ersten Zeile überprüfen würdest, könntest du sehen, dass in $tmp nur ein Leerstring abgelegt ist. Dem den Inhalt von $i hinzuzufügen ergibt "11".  
      
    
    > Bzw. wie schaffe ich es, einen dynamischen Zugriff auf meine Datenbank zu erstellen?  
      
    Mit so genannten variablen Variablen bekommst du das auch mit Objekten hin.  
      
      $tmp = 's\_' . $i;  
      echo $row->$tmp; // beachte das zweite $  
      
    Alternativ ginge es wie folgt, wenn du nicht Objekte sondern Arrays fetchen würdest.  
      
      $key = 's\_' . $i;  
      echo $row[$key];  
      
    oder  
      
      echo $row['s\_' . $i];  
      
      
    Lo!