2015-08-30 131 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