时间:2016-01-11 22:58:26

标签: php mysql pdo

在我的班级'uzytkownikclass.php'中,我有一个名为'$ handler'的变量。该变量存储与MySQL数据库的连接。之前,我创建了一些查询数据库数据的方法。这些功能正常。但我创建了一个名为'hasRole'的新方法,用于检查用户角色(管理员,主持人等)。但我有一个错误,PDO对我来说是新的,我不能单独解决这个问题。 这是我的代码:

public function hasRole()
{
  $email=$_SESSION['email_session'];
$stmt = $this->handler->prepare("SELECT COUNT(*) FROM users INNER JOIN rolausera ON users.id = idusera INNER JOIN rola ON idroli = rola.id WHERE email = :email AND rola.id = :rola");
  $stmt->bindValue(':email',$email, PDO::PARAM_STR);
  $stmt->bindValue(':rola',$rola, PDO::PARAM_STR);
  $stmt->execute(); 
  $result = $stmt->fetchAll();
  if($result[0]>0)
  {
    return TRUE;
  }
  else
  {
    return FALSE;
  }
}

这是一个错误:

Fatal error: Call to a member function prepare() on null in D:\Programy\XAMPP\htdocs\logic\uzytkownikclass.php on line 120

正如我之前所说,我有工作方法:

$stmt = $this->handler->prepare("SELECT id, login, email, haslo FROM users WHERE email=:email1 ");
      $stmt->execute(array(':email1'=>$email1));
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

这是我的连接方法:

public $handler;
public function connection()
{
  $this->handler = new PDO('mysql:host=localhost;dbname=blog', 'root', '',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  if($this->handler==false)
  {
    echo 'Blad';
  }

}

我试图删除查询中的关系并使用简单的'SELECT * FROM user',我有同样的错误。 问候。

2 个答案:

答案 0 :(得分:1)

问题是:你是否在调用hasRole()之前调用了connection()方法,或者你在代码中某处关闭了连接?无论如何,我会检查所有方法,尝试查询数据库,如果建立连接并调用connection()方法,如果没有。 Php的is_null()函数有助于确定是否已设置变量。我还会检查$ handle是否为false。

答案 1 :(得分:0)

我认为这是PHP 5.6 [Beta]的问题。 检查您的活动PHP版本,如果您有PHP 5.6 [Beta],请更改为5.4。

我遇到了同样的问题,一个用于连接PDO工作正常的类,并且没有更改代码,这个错误:致命错误:调用一个成员函数prepare()on null in ...

对于经验,当我有这些错误时,我会看到我的PHP版本。在我的情况下,托管更改PHP版本没有建议:(

请参阅:PHP bugs