我需要找到一种方法来使用户级别脱离用户的用户名。我的用户名变量是:
$username = $_SESSION['username'];
我已经将所有用户级别存储在数据库中的表“用户”和列“级别”中。我需要一个 MySql 查询,它允许我像这样创建一个会话变量:
$_SESSION['level'] =
提前致谢!
问问题
1993 次
2 回答
2
SELECT level FROM users WHERE username = 'username';
然后根据您用于访问数据库的内容(PDO 等)获取级别并将其插入会话中。
例如,如果您使用的是 PDO:
# Connect to the database
$db = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$sql = 'SELECT level FROM users WHERE username = :username';
$query = $db->prepare($sql); # Prepare SQL statement to prevent SQL Injection Attack
$query->execute(array(':username' => $username)); # Bind parameter username
$_SESSION['level'] = $query->getColumn(); # Fetch data & Assign to session variable
查看http://www.php.net/manual/en/class.pdo.php了解有关使用 PDO 的更多信息。
注意:如果您使用函数来获取数据,并且您的 $db 连接语句在该函数之外,这意味着您的 $db 变量在函数范围之外,因此它将不起作用。您将需要使用global
关键字来解决此问题。例子:
# database.php
$db = new PDO(...);
# otherfile.php
require_once("database.php");
function makeQuery($sql, $dataArr) {
global $db; # tell the compiler we mean the $db object above
$query = $db->prepare($sql);
$query->execute($dataArr);
}
于 2012-04-14T20:59:49.910 回答
0
我建议在将用户名存储为会话变量时将级别存储为会话变量,这可能是在用户登录时
$sql="SELECT * FROM $tbl_name WHERE user = '$user' AND pass = '$pass'";
$result=mysql_query($sql);
$user = mysql_fetch_array($result);
$_SESSION['user'] = $user['user'];
$_SESSION['level'] = $user['level'];
这样您就不必每次都查询用户的级别,您可以随时使用 $_SESSION['level'] 调用其级别
于 2012-04-14T21:41:47.793 回答