MYSQL abfrage mit variablen spaltenname

Hi alle zusammen,

in einer meiner tabellen von meiner mysql datenbank habe ich spalten, die einfach 1, 2 ,3 etc. heißen. Meine abfrage sieht (vereinfacht) so aus:

$abfrage=“SELECT $nummer FROM planer WHERE benutzername = Martin LIMIT 1”;
$ergebnis=mysql_query($abfrage);
$row=mysql_fetch_object($ergebnis);
echo $row->$nummer;

Das Problem dabei ist, dass $row->$nummer nicht richtig erkannt wird. kann mir jemand weiterhelfen?

lg
Martin

hat sich schon erledigt. ich habs selber raqusgefunden

Könntest du noch kurz schreiben, wie. Für nachfolgende User :wink:

Vermutlich lags am „$nummer“ xD Aus 2 Gründen wäre es falsch:

  1. werden Variablen, PHP-seitig, im String mit Doppeltenanführungszeichen aufgelöst [size=85](sofern vorhanden, sonst folgt normale Ausgabe glaube ich)[/size],
  2. nutzt MySQL kein $ Zeichen^^

Allerdings ist in dem Query aber auch gar nichts Escaped… Ich verstehe auch nicht wieso man unnötigerweise immer den QueryString in eine Variable stopft anstatt diesen direkt zu übergeben… [size=85](recycled wird er meist nie… sonst würd’s ja aber auch Sinn machen :ps:)[/size]

[quote=“White-Tiger”]Vermutlich lags am “$nummer” xD Aus 2 Gründen wäre es falsch:

  1. werden Variablen, PHP-seitig, im String mit Doppeltenanführungszeichen aufgelöst [size=85](sofern vorhanden, sonst folgt normale Ausgabe glaube ich)[/size],
  2. nutzt MySQL kein $ Zeichen^^[/quote]
    Selbst wenn man das richtig gemacht hat, ändert es nichts daran, dass 2 in PHP kein gültiger Variablenname ist.
    Es muss auf eine Syntax wie $row->{2} zurückgegriffen werden.

Davon abgesehen, ist das

schon ein ziemlich deutliches Anzeichen für einen höchstwahrscheinlich vorliegenden Fehler im Datenmodell …

Weil ein auch im Nachhinein noch verständliches und ggf. leicht erweiterbares Script wichtiger ist, als „minimaler Code“.

Es gab mehrere fehler in meinem sript:

wenn man schreibt
$abfrage=“SELECT $nummer FROM planer WHERE benutzername = Martin LIMIT 1”;

dann wird $nummer nicht als spaltenname erkannt. man muss also folgendes schreiben:
$abfrage=“SELECT $nummer FROM planer WHERE benutzername = Martin LIMIT 1”;

Die `` zeichen signalisieren, dass es sich um eine spalte handelt.

bei dieser abfrage
$row=mysql_fetch_object($ergebnis);
echo $row->$nummer;

erkennt er $nummer ebenfalls nicht als tabellenspalte. hier habe ich es so gelöst:
$row=mysql_fetch_array($ergebnis);
echo $row[$nummer];

nun funktioniert es.

lg
Martin

hmm… hätte es mir genauer Anschauen sollen xD
Hab, wie vielleicht schon bemerkt, lange nicht an MySQL gearbeitet [size=85](auch allgemein nie wirklich viel… eigl. immer so einfach und schnell/performant wie möglich)
[/size] bzw. sogar mit PHP schon nen gutes Jahr nicht mehr [size=85](außer paar Kleinigkeiten)[/size]

Wenn $nummer sogar wirklich aufgelöst werden sollte [size=85](was ich aus mehreren Gründen nie innerhalb „“ machen würde)[/size] und [size=85](wie ich jetzt festgestellt habe)[/size] eine Zahl ist, dann ists klar wieso es nicht geht… denn dann müsste der QueryString so aussehen:<span class="syntaxdefault"></span><span class="syntaxstring">'SELECT `'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$nummer</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'` FROM `planer` WHERE `benutzername` = \'Martin\' LIMIT 1'</span><span class="syntaxdefault"> </span>
Und eben der Fehler beim $row beseitigt xD
[size=85](wobei ich nicht genau weiß wie sich MySQL bei der Nummer verhält, MySQL ist in der Lange dort direkt ne Expression auszuführen bzw. zu Rechnen, jedoch könnte es sein das bei dem Query dennoch in erster Linie nach der Spalte gesucht wird)[/size]

Edit: to late xD Aber hatte recht… :stuck_out_tongue: [size=85](man sollte halt auch richtig lesen :ps:)[/size]