2017-03-27 2 views
-1
現在、私はこのエラーが抱えている

PHPのMySQLのコール

Fatal error: Call to undefined method users::prepare() in C:\xampp\htdocs\hrm2\header.php on line 21

DBCONFIG:

<?php 
class database{ 
function __construct() 
{ 
    $db_user="root"; 
    $db_pass=""; 
    try { 
     $con = new PDO('mysql:host=localhost;dbname=hrm', $db_user, $db_pass); 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     return $con; 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
} 
} 

class.user.php

<?php 

session_start(); 

class users 
    { 

    protected $db; 

    function __construct(){ 

    require_once $_SERVER['DOCUMENT_ROOT']."/hrm2/dbconfig.php"; 
    $this->db= new database(); 

    } 

    function select($userid){ 
     try{ 
      $stmt=$this->db->prepare("SELECT * from users where 
    uesrid=:userid"); 
     $stmt->execute(array(':userid'=>$userid)); 
     } catch(PDOException $e){ 
     $e->getMessage(); 
     } 
    } 

header.phpのを、エラーが発生しています:

<!doctype html> 


<?php 

include('Class/class.user.php'); 


$user= new users(); 



// check if user is logged in 
if($user -> logado()==""){ 
    $user->redirect('login.php'); 

} 


$userid=$_SESSION["sessao"]; 
$userRow=$user->select($userid); 



?> 

header.phpファイルに用意されている準備がうまくいかない理由は分かりませんが、PHP OOPで新しくなっているので、少し間違えることがあります私から作られた

+1

あなたの 'users'クラスには' prepare'メソッドがありません。 '$ user-> prepare()'は何をすると思いますか?コンストラクタの戻り値は無視され、作成するクラスのオブジェクトが常に返されます。 '$ db'を返すメソッドを定義する必要があります。 – Barmar

+0

コードを更新しました@Barmar – sygamers

+0

なぜあなたは別のクラスの中でクラスを宣言していますか?ファイルを最上部に含めてから、ユーザークラスの内部でDBクラスをインスタンス化してください。 – aynber

答えて

2

user::select()にはいくつか欠けています。

$stmt->fetch()を呼び出さず、何も返しません。そして、エラーをキャッチすると、エラーメッセージは表示されません。また、クエリにタイプミスがあります。

function select($userid){ 
    try{ 
     $stmt=$this->db->prepare("SELECT * from users where userid=:userid"); 
     $stmt->execute(array(':userid'=>$userid)); 
     return $stmt->fetch(PDO::FETCH_ASSOC); 
    } catch(PDOException $e){ 
     echo $e->getMessage(); 
    } 
} 
+1

* "クエリにもタイプミスがあります" * - "これはクエリの潜在的なタイプミス" *のようなものです。スキーマを100%保証することはできません。 –

+0

@Barmarおかげさまで、エラーは消えましたが、別のものが登場しましたが、おそらく私は新しい質問をする必要がありますか、私はここで聞くことができますか? – sygamers

+0

@ Fred-ii-確かに、私はスキーマのすべての種類のスペルミスを見たことがありますが、私はここで手足に出ることに決めました。 – Barmar