代码与PDO无法正常工作它不会返回' user_id'

时间:2015-07-07 05:53:55

标签: php pdo

我很喜欢RBAC系统,但是prlomlem无法获得id并存储在会话中     在以下代码错误中:

  

致命错误:在非对象中调用成员函数prepare()   第19行的C:\ wamp \ www \ CRM \ login.php

这是我的代码块:

<?php 
require('connection.inc.php');

require_once "Role.class.php";
require_once "User.class.php";

session_start();

$username = $_POST['username'];
$password = $_POST['userpwd'];

if(!empty($username) )  //   && $_SESSION['username'] == ''
{

    try
    {
        $stmt = $dbhandle->prepare('SELECT `user_id` FROM `user` WHERE `username` = :username');

        $stmt->execute(array('username' => $username));
        $result = $stmt->fetchAll();
        if (count($result)) 
        {
            foreach ($result as $row) 
            {
                echo $row['user_id'];
                $_SESSION['user_id'] = $row['user_id'];
            }
        } 
        else 
        {
            echo "No rows returned.";
        }
    }
    catch(PDOException $e)
    { 
        echo $e->getMessage();
    }

    if(isset($_SESSION["user_id"]))
    {
        $user = new User($_SESSION["user_id"]);

        if ($user->hasPermission("permission"))
        {
            //This user is allowed to do this
            header("Location: dashbord.php");
            exit();
        }

        if ($user->hasPermission("no_permission"))
        {
            //This user is NOT allowed to do this
            header("Location: index.php");
        }
    }   
}
else
{
?>
    <script type="text/javascript">
    alert('ERROR:Please enter your username and password');
    //window.location=".html";
    </script>
<?php
}
?>

2 个答案:

答案 0 :(得分:0)

绑定您要搜索的值,并检查是否返回了行。

$stmt = $this->db->conn->prepare('SELECT `user_id` FROM `user` WHERE `username`=:username');
$stmt->execute(array('username' => $username));
$result = $stmt->fetchAll();
if (count($result)) {
    foreach ($result as $row) {
        echo $row['user_id'];
        $_SESSION['user_id'] = $row['user_id'];
    }
} else {
    echo "No rows returned.";
}

答案 1 :(得分:0)

<强> UPDATE-1:

首先更新 connection.inc.php 文件,如下所示:

<?php 
  $hostname = "localhost"; 
  $username = "root"; 
  $password = ""; 
  $db = "test"; 
  try{ //connection to the database

    // you missed 'mysql:host=$hostname;dbname=$dbname'.
    $dbhandle = new PDO("mysql:host=$hostname;dbname=$db", $username, $password); 
  } 
  catch(PDOException $e) { echo $e->getMessage(); } 
?>

现在,您的主要查询页面

try{
  $query ="SELECT user_id FROM user WHERE username = ?";

  $stmt = $dbhandle->prepare($query);
  $stmt->bindParam(1, $username ); // bind the username
  $stmt->execute();   // execute query
  // returning rows form database
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['user_id']; // echo to varify the row data
    $_SESSION['user_id'] = $row['user_id']; // can not understand why you make session for each user_id
  }
}
catch(PDOException $e){ echo $e->getMessage();}