PHP PDO mySQL查询返回列名而不是值

PHP PDO mySQL查询返回列名而不是值,php,mysql,pdo,Php,Mysql,Pdo,我正在设置一个web应用程序,该应用程序具有多个用户角色,用于确定特定用户在访问特定部分时获得的视图(或者这些部分是否对他们可用)。我有一个表(“用户”),其中包括“用户名”和“角色”列。我有第二个表(“角色”),其中包含“角色”列以及每个部分的列,每个部分都有多个可能的值,这些值驱动每个角色的用户体验。我在这里关注的专栏叫“useradminview”,但我对所有其他专栏都有同样的问题 我没有问题获得一个给定的用户的角色时,他们登录。但是,当我试图获取与该角色关联的useradmin视图时,我

我正在设置一个web应用程序,该应用程序具有多个用户角色,用于确定特定用户在访问特定部分时获得的视图(或者这些部分是否对他们可用)。我有一个表(“用户”),其中包括“用户名”和“角色”列。我有第二个表(“角色”),其中包含“角色”列以及每个部分的列,每个部分都有多个可能的值,这些值驱动每个角色的用户体验。我在这里关注的专栏叫“useradminview”,但我对所有其他专栏都有同样的问题

我没有问题获得一个给定的用户的角色时,他们登录。但是,当我试图获取与该角色关联的useradmin视图时,我的查询返回的是列名,而不是预期的值

我在stackoverflow和其他网站上发现了几篇关于相同症状的帖子,但查询设置与我的不同。非常感谢您的帮助

//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");

您不能通过绑定输入行名称。将其更改为:

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

您的问题很可能与
:page
有关。
getPageView
函数正在尝试将列名绑定为参数。那是不可能的。只能绑定值,不能绑定标识符。因此,使用
->bindValue(“:page”,…)
您将永远无法获得相应的列,但是无论您使用
$page
预设了什么文本字符串。啊哈!非常感谢。我没有意识到——这就是诀窍!谢谢这就解决了问题。不过应该确保列名是否确实存在。