2015-08-30 98 views
0

我设立有其决定什么浏览访问特定部分,当一个特定的用户获得多个用户角色的Web应用程序(或那些部分是偶数提供给他们)。我有一个包含“用户名”和“角色”列的表(“用户”)。我有一个具有列“角色”,以及每个部分的列,驱动每个角色的用户体验,每个都具有多个可能值的第二个表(“角色”)。我在这里关注的是调用“useradminview”,但我对所有其他列都有同样的问题。PHP MySQL的PDO查询返回的列名,而不是价值

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

我发现在计算器和其他网站都是相同的症状几个职位,但查询是不同的设置我得从什么。任何帮助是极大的赞赏!

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

您的问题很可能是':page'。 'getPageView'函数试图将列名作为参数绑定。这是不可能的。只能绑定值,而不是标识符。因此,与' - > bindValue(“:页”,...),'你永远也得到了按列,但无论文字字符串你曾与'$ page'预设。 – mario

+0

啊哈!谢谢!我没有意识到这一点 - 那就是诀窍! – nicko

回答

-1

你不能通过绑定放置行名。将其更改为:

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

谢谢!这照顾了它。 – nicko

+0

应该确保列名实际上是否存在。 – kolunar