一个函数里面的php会话变量

时间:2016-05-31 10:50:35

标签: php mysql

我正在尝试让我的函数返回用户名和roleid。这是我为此任务所拥有的代码:

session_start();
if($_SESSION['LoggedIn']){
$username = $_SESSION['username'];
function getUserRole($username, $roleid){
    $con = dbConnect();
    $query = "select * from user inner join userrole on user.id = userrole.userid inner join role on role.id = userrole.roleid where username = :username and roleid = :roleid";
    $sql = $con->prepare($query);
    $sql->bindValue(':username', $username);
    $sql->bindValue(':roleid', $roleid);
    $sql->execute();
    $row = $sql->fetch();
    $username = $row['username'];
    $roleid = $row['roleid'];

    if($row > 0){
        return  $username . $roleid;
    } else {
        return false;
    }
}

print getUserRole($username, $roleid);
}

我有三个看起来像这样的表:

mysql> select * from role;
+---------------+----------------------------------+
| id            | description                      |
+---------------+----------------------------------+
| administrator | add, remove and edit manuscripts |
| reviewer      | review manuscripts               |
| site user     | read manuscripts                 |
+---------------+----------------------------------+
3 rows in set (0.00 sec)

mysql> select * from userrole;
+--------+---------------+
| userid | roleid        |
+--------+---------------+
|      1 | administrator |
|      2 | revinothingewer      |
|      3 | other         |
+--------+---------------+
3 rows in set (0.01 sec)

mysql> select * from user;
+----+----------+----------------------------------+
| id | username | password                         |
+----+----------+----------------------------------+
|  1 | kamau    | 80ce10e582e13ec085f13409c3add5a4 |
|  2 | admin    | db43b86da58631629adada27f1db5841 |
|  3 | amaina   | 7fc961ec5b6b5d51d2445e97775bfc0d |
+----+----------+----------------------------------+

roleid值来自以下脚本:

$query = "select * from user inner join userrole on user.id = userrole.userid inner join role on role.id = userrole.roleid";
    $sql = $con->prepare($query);
    $sql->execute();
    $row = $sql->setFetchMode(PDO::FETCH_ASSOC);
    while ($row = $sql->fetch()){ 
    $roleid = $row ['roleid'];
    }

我的问题是为什么var_dump (getUserRole($username,$roleid))返回false?

2 个答案:

答案 0 :(得分:2)

为什么var_dump(getUserRole($ username,$ roleid))返回false?因为

if($row > 0){

每次这种情况只会发生错误。如果你想获得用户名和角色。您必须执行以下步骤。 你知道用户名。

$username = $_SESSION['username'];

2。你需要知道roleid。因此,使用以下代码获取roleid值。

$con = dbConnect();
$query = "SELECT roleid FROM user JOIN userrole ON user.id = userrole.userid WHERE user.username = :username";
$sql = $con->prepare($query);
$sql->bindValue(':username', $username, PDO::PARAM_STR);
$sql->execute();
$row = $sql->fetch();
$roleid = $row['roleid'];

多数民众赞成。现在您知道用户名值和角色值。 保持简单的伙伴。欢呼声。

答案 1 :(得分:1)

...

问题编辑后1 OP

$roleid的价值是多少?此时你还没有设置插入函数的roleid的值是什么,所以函数没有运行,PHP返回错误(你无法检测到)。

通过OP进一步编写问题后

你需要考虑你的逻辑并思考你实际在做什么。在你走路之前,你似乎想要跑步。

  • 函数getUserRole采用两个参数,您只传递 一个 null参数,因此该函数中<{1}} 的值该函数始终为$roleid

你的SQL:

null

阅读此查询,实际阅读并确定它正在做什么。您正在查找"SELECT * FROM user INNER JOIN userrole ON user.id = userrole.userid INNER JOIN role on role.id = userrole.roleid WHERE username = :username AND roleid = :roleid" username = <value>表格中的值 的值 < em>因为没有从页面脚本传递给函数。

因此,您正在寻找具有NULL roleid值的用户名值,并且您的表显示已填充每个roleid值,以便始终只返回任何值。

另外,因为您正在使用 INNER JOIN ,这意味着如果查询的任何部分什么都不返回,则整个查询将不会返回任何内容,因此这就是您的原因所在没有回应。

这是您的SQL返回false的主要原因

您还需要修改定义,因为您引用了多个表,每个表列应引用为roleid = <value>,例如

<table_name>.<column_name>

整个SQL查询。

如何修复它:

有几个选择:

  • 使用 user.id = userrole.userid 代替LEFT JOIN

  • 在函数或页面调用函数中将INNER JOIN的值设置为非null。

  • 从函数参数中删除roleid,而是从函数开头的单独SQL查询中派生值。

选择权在你手中。请阅读您实际要求数据库执行的操作,以了解它为什么不这样做。还可以使用错误记录来获得有用的反馈!

有用的链接: