Die mySQL-Abfrage von PHP PDO gibt den Spaltennamen anstelle des Werts zurück

Nicko

Ich richte eine Webanwendung mit mehreren Benutzerrollen ein, die bestimmen, welche Ansicht ein bestimmter Benutzer beim Besuch bestimmter Abschnitte erhält (oder ob diese Abschnitte ihnen überhaupt zur Verfügung stehen). Ich habe eine Tabelle ("Benutzer"), die Spalten für "Benutzername" und "Rolle" enthält. Ich habe eine zweite Tabelle ("Rollen"), die Spalten für "Rolle" sowie eine Spalte für jeden Abschnitt enthält, wobei jede mehrere mögliche Werte enthält, die die Benutzererfahrung für jede Rolle verbessern. Die Spalte, um die es hier geht, heißt "useradminview", aber ich habe das gleiche Problem mit allen anderen Spalten.

Ich habe kein Problem damit, die Rolle eines bestimmten Benutzers zu erhalten, wenn er sich anmeldet. Wenn ich jedoch versuche, die dieser Rolle zugeordnete Benutzeradministrationsansicht abzurufen, gibt meine Abfrage den Spaltennamen und nicht den erwarteten Wert zurück.

Ich habe mehrere Beiträge zu Stackoverflow und anderen Websites gefunden, die dasselbe Symptom aufweisen, aber die Abfragen sind anders eingerichtet als meine. Jede Hilfe wird sehr geschätzt!

//function to get role for user - this returns the expected value
function getUserRole($username) {
    include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/db.php");
    try {
        $sql = "SELECT role FROM users WHERE username = :username";
        $s = $pdoUsers->prepare($sql);
        $s->bindValue(":username", $username);
        $s->execute();
    } catch (PDOException $e) {
        $error = "Error obtaining user role";
        include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/dboutput.php");
        exit();
    }
    $role = $s->fetch();
    return $role[0];
}

//function to check page view for that role - this returns the column name
function getPageView($role, $page) {
    include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/db.php");
    try {
        $sql = "SELECT :page FROM roles WHERE role = :role";
        $s = $pdoUsers->prepare($sql);
        $s->bindValue(":role", $role);
        $s->bindValue(":page", $page);
        $s->execute();
    } catch (PDOException $e) {
        $error = "Error obtaining pageview for role";
        include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/dboutput.php");
        exit();
    }
    $pageview = $s->fetch();
    return $pageview[0];
}

//end-goal query needs to be able to store the values as session variables
$_SESSION["username"] = $_POST["username"];
$_SESSION["role"] = getUserRole($_SESSION["username"]);
$_SESSION["useradminview"] = getPageView($_SESSION["role"], "useradminview");
Bernd Buffen

Sie können den Zeilennamen nicht über bind eingeben. ändere es in:

   try {
        $sql = "SELECT $page FROM roles WHERE role = :role";
        $s = $pdoUsers->prepare($sql);
        $s->bindValue(":role", $role);
        $s->execute();
    } catch (PDOException $e) {

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Die Powershell PostrgreSQL-Abfrage gibt nur die Feldanzahl anstelle des Werts zurück

SQL: Abfrage gibt Spaltennamen anstelle von Wert zurück

Gibt den Spaltennamen des ersten Werts ungleich Null zurück

Die indirekte Erweiterung gibt den Variablennamen anstelle des Werts zurück

Die Lambda-Funktion gibt in Python den Funktionsnamen anstelle des Werts zurück

MySQL gibt den Namen der Spalte anstelle des Werts zurück

Die automatische Vervollständigung von jQuery gibt das gesamte Array anstelle des gesuchten Werts zurück

Yesod selectFieldList gibt die Listenindexnummer anstelle des Werts zurück

Die gespeicherte Prozedur gibt 0 anstelle des Werts zurück

Klasse gibt <gebundene Methode ...> anstelle des von mir zurückgegebenen Werts zurück (Python)

Die Abfrage an die Datenbank gibt keinen Zeilenwert zurück, sondern den Spaltennamen

Die berechnete Eigenschaft Vue gibt die gesamte Funktion anstelle des Werts zurück

ngx-translate .instant gibt den Schlüssel anstelle des Werts zurück

Collections.min gibt den Speicherort anstelle des Werts zurück

Enum.ToString() gibt den Standardwert anstelle des angegebenen Werts zurück

Warum gibt der Helfer von std :: tuple anstelle des Werts eine rvalue-Referenz zurück?

Warum gibt COALESCE NULL anstelle des von mir benötigten Werts zurück?

mysqli_fetch_array () gibt NULL anstelle des Werts von COUNT () zurück

Die Linq-Aggregatfunktion gibt 0 anstelle des korrekten Werts zurück

Die dynamische Abfrage von PHP und MySQL gibt nur Ergebnisse ohne where-Klausel zurück

Die einfache Abfrage von MySQL gibt null Zeilen zurück

MySQL Coalesce gibt 0 anstelle des tatsächlichen Werts zurück

PHP-Iterator-Schnittstelle: current() gibt das zugrunde liegende Array anstelle des ersten Werts zurück

Die Laravel-Abfrage gibt den Builder anstelle der Sammlung zurück

Inline R gibt 0 anstelle des korrekten Werts zurück?

Funktion gibt null anstelle des erwarteten Werts zurück

Warum gibt meine Abfrage "OK" anstelle von Zeilen zurück?

JMockit - Erwartung gibt den alten Wert anstelle des Werts zurück, der dem privaten Feld zugeordnet ist

PDO gibt false anstelle des leeren Arrays zurück

TOP Liste

heißlabel

Archiv