我设立有其决定什么浏览访问特定部分,当一个特定的用户获得多个用户角色的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");
您的问题很可能是':page'。 'getPageView'函数试图将列名作为参数绑定。这是不可能的。只能绑定值,而不是标识符。因此,与' - > bindValue(“:页”,...),'你永远也得到了按列,但无论文字字符串你曾与'$ page'预设。 – mario
啊哈!谢谢!我没有意识到这一点 - 那就是诀窍! – nicko