gelöst: Variablen in db_query Abfragen
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 18.08.2008 - 19:59 Uhr in
Hallo Leute :)
ich hab da ein kleines Problem bei einer Abfrage einer eigens erstellten Tabelle.
Drupal 6.3 deutsche Version.
Ich möchte eine Seite erstellen in der eine oder mehrere Zeilen ausgegeben werden.
Und zwar Userspezifische.
Dazu habe ich eine Tabelle erstellt (in der selben DB, in der auch Drupal installiert wurde).
Der Inhalt beschränkt sich derzeit auf den Usernamen und ein paar Testwerten und ist in etwa so aufgebaut
account wert01 wert02
hans 1 5
peter 5 3
ich möchte nun also, dass der jeweils eingeloggte user nur seine eigenen "Daten" angezeigt bekommt.
Ich habe auch ein Script gefunden, das dies generell ausgibt. Aber nur wenn ich den Usernamen hardcodiert eintrage.
Egal was ich anstelle ich bekomme es nicht hin dies über eine Variable auslesen zu lassen.
Hier der Codeschnipsel den ich dazu verwende:
<?php
$header = array('account', 'wert01', 'wert02');
$rows = array();
$sql = 'SELECT * FROM {test01} where account = "hans"';
$res = db_query($sql);
while ($row = db_fetch_array($res)) {
$rows[] = $row;
}
print theme('table', $header, $rows);
?>
Dies funktioniert so auch super, aber halt wie gesagt nur hardcodiert.
Nicht selbst erstellt, nur ersucht :) ich bin selbst noch am Anfang und versuche zu lernen.
Desweiteren habe ich gefunden, dass man den aktuell angemeldeeten User mittels $user->name abfragen kann
Also habe ich in dem oben angegebenen Script versucht dies irgendwie einzubauen.
Ausgeben kann ich den Usernamen auch (keine Ahnung ob dieses "Übersetzen" in eine neue Variable überhaupt notwendig ist (hab ich mal irgendwo gesehn :) )
global $user;
$_useracc = $user->name;
print $_useracc;
jedoch erhalte ich hierbei immer folgendes:
user warning: Unknown column '$_useracc' in 'where clause' query: SELECT * FROM drupal_test01 WHERE account = $_useracc
Die Variable wird also nicht als solche erkannt sondern einfach als Text übergeben.
Auch habe ich schon folgendes probiert:
$sql = 'SELECT * FROM {test01} where account = $_useracc ';
$res = db_query($sql);
duch
$res = db_query("SELECT * FROM {test01} where account = $_useracc");
ausgetauscht.
Hierbei wird lustigerweise die Variable korrekt eingesetzt. Jedoch erhalte ich dennoch eine ähnliche Fehlermeldung:
user warning: Unknown column 'hans' in 'where clause' query: SELECT * FROM drupal_test01 WHERE account = hans
ich kann mir das ehrlich gesagt nicht erklären, überall werden Variablen verwendet, nur an der Stelle scheint es nicht zu funktionieren.
Ich habe schon recht intensiv nach einer Lösung hier gesucht aber nichts passendes gefunden leider.
Sorry für den vielen Text, aber ich wollte es so genau wie möglich beschreiben.
- Anmelden oder Registrieren um Kommentare zu schreiben
gelöst
am 19.08.2008 - 09:42 Uhr
so habs nun doch selbst ergoogelt :)
War echt nicht leicht zu finden.
Für alle die es intressiert.
hier der korrekte code:
<?php
$header = array('account', 'wert01', 'wert02');
$rows = array();
$sql = "SELECT * FROM {test01} where account = \"$user->name\"";
$res = db_query($sql);
while ($row = db_fetch_array($res)) {
$rows[] = $row;
}
print theme('table', $header, $rows);
?>
Man muss also selbst die Variable in doppelte Hochkomma setzen und scheinbar diese doppelten Hochkommas maskieren.
Ahso, ausserdem dürfen SQL Abfragen mit Variablen nicht in einfachen hochkommas stehen, da darin Variablen generell nicht umgesetzt werden.
Ausserdem muss man vorher das $user->name auch nicht in eine Variable "umleiten" funktioniert direkt.
Ob das gut ist kann ich leider nicht sagen. Wer etwas dazu sagen kann , immer her damit :)
Per Zufall darauf gestossen.
am 07.02.2011 - 15:45 Uhr
Per Zufall darauf gestossen. Ist alt, aber vielleicht liest das noch jemand.
Nein, das ist nicht gut!
*IMMER* platzhalter verwenden bei Queries:
<?php
$sql = "SELECT * FROM {test01} where account ='%s'";
$res = db_query($sql. $user->name);
?>