Probleme bei DB-Abfrage mit SQL

Hallo Leute.

Habe ein Problem.Wollte Spaßeshalber mal ne kleine Passwortabfrage starten. Leider kann ich mit der SQL-Abfrage nicht auf meine DB zugreifen so wie das sein sollte:

[php]$query = ‘SELECT “German”.“User”.“PWT” FROM “German”.“User” WHERE “German”.“User”.“UserName” = “German”.“User”."’ . $user . ‘";’;
$result = pg_query($query) or die('Abfrage fehlgeschlagen: ’ . pg_last_error());[/php]

Passende Fehlermeldung:

Abfrage fehlgeschlagen: ERROR: column User.Christopher does not exist LINE 1: ...German"."User" WHERE "German"."User"."UserName" = "German"."... ^

Wäre über eure Hilfe echt Happy!

Dein WHERE ist kapott, Du versuchst mit einer Spalte einer Tabelle zu vergleichen, und nicht mit Deiner Variablen.
tausche mal:
WHERE “German”.“User”.“UserName” = “German”.“User”.“’ . $user . '”;';

gegen:
WHERE “German”.“User”.“UserName” = ‘$user’;


Andreas

Habe ich gemacht und die neue Fehlermeldung ist:

Abfrage fehlgeschlagen: ERROR: column "christopher" does not exist LINE 1: ..."German"."User" WHERE "German"."User"."UserName" =Christophe... ^

Ich habe irgendwie die Vermutung das er die Spalte nicht genau trifft. Aber ich weis nicht woran es hängt

setze um Deine Variable herum einfache Anführungszeichen, also '.

Andreas

habe gerade nen paar Varianten ausprobiert.
Direkt um die Variable herum: ‘$user’

um die Pfade herrum: ‘“German”’.’“User”’. …

Hat nichts gebracht. ausser syntax-error in der zeile.

Muss das Hochkomma den zwischen . $user ? Als so .’$user’.

Wenn Deine Tabelle im search_path liegt, kannst Du die Angaben vom Schema auch weglassen.

Ich zeig mal ein Bleistift, zu Begin des Scriptes steht search_path auf foo:

test=# \d bla;
       Table "foo.bla"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | integer |
 val    | text    |

test=# select * from bla;
 id | val
----+------
  1 | test
(1 row)

test=*# set search_path=public;
SET
test=*# select "foo"."bla"."val" from "foo"."bla" where "foo"."bla"."val"='test';
 val
------
 test
(1 row)

Sieht zwar nicht schön aus, tut aber, was es soll.

Andreas

Sieht einleuchtend aus. Allerdings weis ich nicht wie ich das in mein php-Script einbauen kann.
ausserdem müsste ich die einstellung dann bei beenden des scripts wieder zurückstellen.
php- weil das malnen vorgeschmag für nen Log In werden soll.

Welche Einstellung? search_path? Das gilt FÜR DIE AKTUELLE SESSION, wenn Du es innerhalb einer Session aufrufst. Es gilt sogar nur innerhalb einer Transaktion, wenn es nach dem Start einer TX gemacht wird und ein Rollback kommt.

Andreas

Dann wäre das ja optimal. Wäre nur noch die frage wie ich das vernünftig einfügen kann unter php.

Bun da leider totaler nubee!

Aus:

$query = 'SELECT ...

einfach:

$query = 'set search_path=foo; SELECT ...

machen wäre zu einfach, oder?


Andreas

Erstmal danke für die hilfe.

dann aber doch auch die frage warum du das hier machst wenn es dich nervt? So kommt die antwort zumindest rüber.

und ja, wenn man es weis ist es zu einfach :wink:


PS: Habe den search_path geändert, hat leider auch nur die Fehlermeldung gebracht:

Abfrage fehlgeschlagen: ERROR: column “christopher” does not exist LINE 1: … “German”.“User” WHERE “German”.“User”.“UserName”=christophe… ^

Das täuscht.

Andreas

na da bin ich ja beruhigt


@all für weitere ideen wäre ich sehr dankbar!

Du mußt nicht mit search_path hantieren, Du kannst auch den Pfad komplett angeben. Ein Beispiel dazu habe ich auch gezeigt. Hier noch einmal, ich frage eine Tabelle im Schema foo ab,welches nicht im search_path liegt:

test=*# show search_path;
 search_path
--------------
 $user,public
(1 row)

test=*# select "foo"."bla"."id" from "foo"."bla" where "foo"."bla"."val"='test';
 id
----
  1
(1 row)

foo ist das Schema, bla die Tabelle und id bzw. val die Spalten, Inhalt ist 1 und ‘test’.

Andreas

Bitte korregiere mich wenn ich falsch liege, aber das habe ich doch in meinem Code gemacht?
Also ich meine einen vollständigen pfad angegeben.

Das einzige was ich geändert habe ist doch, dass ich stat deinem ‘test’,
in der Abfrage eine php-Variable eingebunden habe.
die wird auch angenommen und mit ausgewertet.
Und da kommt dann die Fehlermeldung, dass eine Spalte mit dem Wert der Variablen nicht existiert.

Abfrage fehlgeschlagen: ERROR: column “christopher” does not exist LINE 3: WHERE “UserName”=“christopher”; ^

Das ‘christopher’ ist die Übergebene Variable.
Und gerade weil dass so ist denke ich das ich in der Abfrage beim Einbinden der Variablen einen Zeichenfehler habe.
Mir fällt nur langsam nicht mehr viel ein, woran das liegen kann. Habe schon ziemlich viele Variationen durch.

Vielleicht kannst meinen Code aus dem ersten Post nochmal durchschauen? Wäre dir echt dankbar

schau noch mal in meiner allererste Antwort.

tausche mal:
WHERE "German"."User"."UserName" = "German"."User"."' . $user . '";';

gegen:
WHERE "German"."User"."UserName" = '$user';

Deine Antwort darauf bzw. die gezeigte Fehlermeldung läßt mich vermuten, daß Du das nicht so gemacht hast.
Hint: nach dem = - Zeichen muß NUR Deine Variable stehen, nicht nochmal das Schema und auch nicht die Tabelle.

Andreas

Habe ich gemacht , sieht jetzt so aus:

[php]$query = ‘SELECT “German”.“User”.“PWT” FROM “German”.“User” WHERE “German”.“User”.“UserName” = ‘$user’’;[/php]

Das gab dann die Fehlermeldung:

$query = ‘SELECT “German”.“User”.“PWT” FROM “German”.“User” WHERE “German”.“User”.“UserName” = ‘$user’’;

P.S.: Die Hochkommas vor und nach der Selectanweisung habe ich auch schon versucht wegzulassen also:

SELECT … ‘$user’;

Was deinem Tipp ja auch entsprach. Da gab es folgende Fehlermeldung:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/local/www/apache22/data/data/inhalt.php on line 22

Okay, das ist dann ein PHP-Problem…

$query = 'SELECT "German"."User"."PWT" FROM "German"."User" WHERE "German"."User"."UserName" = \'$user\'';

Andreas

Das passt jetzt… problem ist das ich jetzt auch nen user nehmen kann der nirgends inner db steckt, mit nem passwort was in einem Profil hinterlegt ist und der log in klappt lach