Rolf B: Variable aus PHP Session in MySQL suchen

Beitrag lesen

Hallo benutzer19,

"SELECT ACCOUNTID from accounts  WHERE USERNAME = '$_SESSION['username']) .' " 

Problem 1: PHP Handbuch - Parsing von Variablen. Beispiel 15.

In der "einfachen Syntax" kann man auf Arrays zugreifen, die Strings als Key verwenden, aber der Key darf nicht in Anführungszeichen gesetzt werden. Ansonsten gibt's einen PHP Parse Error. Einschränkung der einfachen Syntax: Der Key muss ein gültiger PHP Name sein. Keys wie "user name" oder "123Name" wären ein PHP Error.

Diesen Error hättest Du in der Ausgabe deiner Webseite sehen müssen, weil PHP damit abbricht. Wenn PHP ihn unterschlagen hat, beschäftige Dich mit der PHP Funktion error_reporting und setze den Level während der Entwicklungszeit hoch. Hier findest Du im PHP Handbuch Beispiele dafür.

In der "komplexen Syntax" hat man diese Einschränkung nicht. Die komplexe Syntax heißt so, weil sie komplexere Zugriffe im Variablenparsing erlaubt. Dort setzt man den Variablenzugriff in geschweifte Klammern. Ein Array-Zugriff mit einem String als Key erfordert dann die Hochkommas.

Problem 2: Die schließende Klammer und der Punkt vor dem schließenden ' dürften einen SQL Fehler auslösen Dir die Suche verhageln, er würde sie als Teil des zu suchenden Usernamens verwenden (thanks @ Andreas). Vermutlich sind die ein Relikt aus vorherigen blinden Versuchen, die Du an Stelle von systematischem Debugging gestartet hast.

So ist es besser:

$sql = "SELECT ACCOUNTID from accounts  WHERE USERNAME = '$_SESSION[username]'" 

oder so, mit der komplexen Syntax:

$sql = "SELECT ACCOUNTID from accounts  WHERE USERNAME = '{$_SESSION['username']}'" 
                                                      // S           P        P  S

Hier hast Du 2 Arten von '. Die beiden äußeren, die ich der Kommentarzeile mit S markiert habe, sind ganz normale Hochkommas die Teil des SQL Strings sind. Die beiden inneren sind Teil des Arrayzugriffs und gehören zur PHP Syntax. Nicht ganz einfach, da den Überblick zu behalten.

MÖGLICHES Problem 3: Du verwendest Altlasten. Es sei denn, diese mysql_query Funktion ist deine eigene.

Eigentlich ist die Funktion mysql_query ein Teil der veralteten, missbilligten und mittlerweile aus PHP entfernten mysql-Funktionsgruppe. Die mysql_...Funktionen wurden durch die mysqli_...Funktionsgruppe ersetzt. Da Du der mysql-Funktion $mysqli als ersten Parameter übergibst, hege ich aber die Hoffnung, dass das deine eigene Funktion ist.

Wenn es aber doch die alte PHP Funktion ist, hast Du 2 Probleme:

  • Du verwendest PHP Version 5.x - die ist ewig nicht mehr supported. Wir sind bei PHP 8.2 angekommen
  • mysql_query aus PHP 5.x gibt eine Result-Ressource zurück, nicht direkt die gefundenen Daten. Du müsstest noch einen fetch machen.

Rolf

--
sumpsi - posui - obstruxi