我有一个从用户检索信息的 SELECT
查询:
网站内的一些个人数据及其分配的用户角色可能不止一个(在示例中有两个)。
我想检索这些用户角色并将它们添加到 $_SESSION
全局变量中。
这是查询(在 phpMyAdmin 中测试它,它按预期工作:检索两行结果,因为用户是相同的,但他有两个角色 ROLE1 和 ROLE2):
$conectar = mysqli_connect(localhost, USER, PASS, DATABASE);
$consulta = "SELECT usuarios.userID, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, rolesUsuarios.nombreRol
FROM rolesUsuarios, usuarios
WHERE usuarios.userEmail='$email'
";
$buscarUsuario = mysqli_query($conectar,$consulta);
if ($buscarUsuario) {
$row = mysqli_fetch_array($buscarUsuario);
[here I have some pass check in place]
$_SESSION['usuario'] = $email;
$_SESSION['nombre'] = $row['userNombres'];
$_SESSION['uid'] = $row['userID'];
$_SESSION['nombreRol'] = $row['nombreRol'];
....
现在,$_SESSION['nombreRol']
是一个字符串。当我打印它时,它只显示ROLE1。
所以我尝试将其转换为数组并通过它循环添加以下内容:
$_SESSION['nombreRol'] = array();
for ($i=0; $i < 3; $i++) {
array_push($_SESSION['nombreRol'], $row['nombreRol']);
}
然后终止 session 并再次开始,这次尝试将其打印为数组:print_r(array_values($_SESSION['nombreRol']));
结果显示:
Array ( [0] => ROLE1 [1] => ROLE1 [2] => ROLE1 )
我应该如何拥有数组中的所有角色才能使用它?
在 Shrikant Mavlankar 发表评论后,我尝试了以下方法:
$rolesAsignados = array();
while($row = mysqli_fetch_array($buscarUsuario)){
array_push($rolesAsignados, $row['nombreRol']);
}
$_SESSION['nombreRol'] = array();
for ($i=0; $i < count($rolesAsignados); $i++) {
array_push($_SESSION['nombreRol'], $rolesAsignados[$i]);
}
然后尝试打印 session 数组:
print_r(array_values($_SESSION['nombreRol']));
它显示:
Array ( [0] => ROLE2 )
最佳答案
您的 WHERE
中没有加入。您将一个用户的记录与角色表中的每一行连接起来,因此您的结果集将会很大,但您只读取第一行。
$consulta = "SELECT usuarios.userID, usuarios.userEmail, usuarios.userPass, usuarios.userFechaGeneracion, usuarios.userNombres, GROUP_CONCAT(rolesUsuarios.nombreRol SEPARATOR '|') AS roles
FROM rolesUsuarios, usuarios
WHERE usuarios.userEmail='$email'
AND rolesUsarios.userID = usarios.userID
GROUP BY usarios.userID
";
然后像这样更改您的分配:
$_SESSION['nombreRol'] = explode('|', $row['roles']);
此外,切勿将未转义的变量放入 SQL 语句中。您应该使用 mysqli_real_escape_string() 或 mysqli::prepare 来绑定(bind)变量。现在没有任何借口可以创建 SQL 注入(inject)缺陷。
关于PHP:$_SESSION 作为数组不起作用,不允许我添加新项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542024/