使用PDO的未定义变量 - 混淆

时间:2013-07-03 19:41:56

标签: php pdo

我刚开始习惯使用PDO而不是mysql_而且我目前正在将所有mysql_函数转换为PDO。我遇到的问题是我完全被这些功能所困扰。这些的目的是从登录时创建的$ _SESSION获取user_id,并使用该user_id从数据库返回其数据。但是,我收到了错误:

  

未定义的变量:user_data

每次我尝试检查某些内容是否为真时,例如admin = 1.这是user_data函数:

function user_data($user_id) {
    global $con;
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = "SELECT $fields FROM `users` WHERE `user_id` = $user_id";
        $result = $con->prepare($data);
        $result->execute();
        $user_data = $result->fetch();

        return $user_data;
    }
}

如果禁用= 1:

,这段代码应调用该函数并销毁会话
if (logged_in() === true) {
    $session_user_id = $_SESSION['user_id'];
    $user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'email', 'password_recovery', 'moderator', 'admin');
    if (user_banned($user_data['username']) === true) {
        session_destroy();
        header('Location: pts.php');
        exit();
    }
}

这是我尝试使用$ user_data变量的示例:

<?php if ($user_data['moderator'] == 1)

如果这很难理解,我很抱歉,因为我在编码方面是一个菜鸟,而且我不是特别擅长解释事情。如果您需要更多代码,请随时提出,我很乐意提供。

谢谢大家。

2 个答案:

答案 0 :(得分:3)

如果用户已登录,则只定义$ user_data。在尝试访问之前,需要确保$ user_data存在。

if (!empty($user_data) && $user_data['moderator'] == 1)

答案 1 :(得分:0)

你的问题是你无法解释的:

$func_num_args = func_num_args();
$func_get_args = func_get_args();

当你的函数只有一个参数时。

然后是if块中的代码:

if ($func_num_args > 1) {
  ...
  return $userdata
}

永远不会执行。所以在你的主执行中调用$var = user_data(...); PHP隐式地将$var指定为NULL,因为没有return语句,然后你的代码会在以后生成未定义的索引错误。