Variable aus PHP Session in MySQL suchen
bearbeitet von Rolf BHallo benutzer19,
~~~php,bad
"SELECT ACCOUNTID from accounts WHERE USERNAME = '$_SESSION['username']) .' "
~~~
Problem 1: [PHP Handbuch - Parsing von Variablen](https://www.php.net/manual/de/language.types.string.php#language.types.string.parsing). 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.
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. Vermutlich sind die ein Relikt aus vorherigen blinden Versuchen, die Du an Stelle von systematischem Debugging gestartet hast.
So ist es besser:
~~~php,good
$sql = "SELECT ACCOUNTID from accounts WHERE USERNAME = '$_SESSION[username]'"
~~~
oder so, mit der komplexen Syntax:
~~~php,good
$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