我有一个非常愚蠢的问题,但我无法立即开始工作 如何使用单个PDO语句仅将查询结果数组的一个字段加载到会话(数组)中? 我评论了下面缺少的代码:
public function getPermissions($user_role_id){
if(!isset($user_role_id) || empty($user_role_id)){
$_SESSION['user']['user_permissions'] = '';
}else{
$db = Database::get_database();
$query = "
SELECT
rp.role_id, rp.permission_id
FROM
role_permission_tbl rp
WHERE
rp.role_id = :role_id";
$query_params = array(
':role_id' => $user_role_id
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$row = $stmt->fetchAll();
if($row){
//I only want to retrieve the field "permission_id"
$_SESSION['user']['user_permissions'] = $row;
}else{
$_SESSION['user']['user_permissions'] = '';
}
}
}
谢谢
答案 0 :(得分:4)
看到您以后的评论后,您似乎想要将所有权限数据保存在会话变量中,以便您可以通过权限ID查找:
$rows = $stmt->fetchAll();
foreach($rows as $row){
//Add to session, keyed by permission ID.
$_SESSION['user']['user_permissions'][$row['permission_id']] = $row;
}
//Then, if you want to see if said permission ID #21 exists:
if(isset($_SESSION['user']['user_permissions'][21])){
echo 'This user has permissions with ID 21!';
$permissionDetails = $_SESSION['user']['user_permissions'][21];
var_dump($permissionDetails);
}
答案 1 :(得分:1)
如果只从表中获取一条记录,您可以尝试$row = $stmt-> fetch();
而不是$row = $stmt->fetchAll();
,
$row["permission_id"];
答案 2 :(得分:1)
与任何其他“立即行动”一样,这个问题具有矛盾的条件 与任何其他PHP代码一样,它比所需的长十倍 像许多其他SO问题一样,它可以通过快速手动查找来解决。
如果您需要数组
中的权限public function getPermissions($user_role_id){
$sql = "SELECT permission_id FROM role_permission_tbl WHERE role_id = ?";
$stm = Database::get_database()->prepare($sql);
return $stm->execute(array($user_role_id))->fetchAll(PDO::FETCH_COLUMN);
}
请注意,在函数内部分配变量是一种非常糟糕的做法。所以,最好这样称呼它
$_SESSION['user']['user_permissions'] = $user->getPermissions($user_role_id);