2016-08-19 14 views
-4

示すエラーは、あなたがprobaly代わりに、オブジェクトの文字列に​​呼びかけているPHPのログインと登録エラー

"Fatal error: Uncaught Error: Call to a member function query() on string in D:\Users\kukor\Documents\XAMPP\htdocs\timetable\class.ManageUsers.php:22 Stack trace: #0 D:\Users\kukor\Documents\XAMPP\htdocs\timetable\login.php(19): ManageUsers->LoginUsers('kayzmark', 'ultimate') #1 {main} thrown in D:\Users\kukor\Documents\XAMPP\htdocs\timetable\class.ManageUsers.php on line 22"

<?php 
class ManageUsers{ 
    public $link; 

    function __construct(){ 
     $db_connection = new dbConnection(); 
     $this->link = $db_connection->connect(); 
     return $this->link; 
    } 

    function registerUsers($password, $ip_address, $date, $time, $username, $email, $uname){ 
     $query = $this->link->prepare("INSERT INTO users (password,ip_address,date,time,username, email, uname) VALUES(?,?,?,?,?,?,?)"); 
     $values = array ($password, $ip_address, $date, $time, $username, $email, $uname); 
     $query->execute($values); 
     $count = $query->rowCount(); 
     return $count; 
    } 

    function LoginUsers($username, $password){ 
     $query = $this->link->query("SELECT * FROM users WHERE username='$username' AND password='$password'"); 
     $rowCount = $query->rowCount(); 
     return $rowCount; 
    } 

    function GetUserInfo($username){ 
     $query = $this->link->query("SELECT * FROM users WHERE username = '$username'"); 
     $rowCount = $query->rowCount(); 
     if($rowCount ==1) 
     { 
      $result = $query->fetchAll(); 
      return $result; 
     } 
     else 
     { 
      return $rowCount; 
     } 
    } 
} 
?> 
+0

こんにちは@KayzMark、ようこそStackOverflow。将来質問を投稿する際には、正確な__problem __を明記してください。 [ヘルプセンター](http://stackoverflow.com/help)で、[mcve](http://stackoverflow.com/help/mcve)や[どのような質問を避けるべきですかasking](http://stackoverflow.com/help/dont-ask)を参照してください。あなたが提供するエラーメッセージはかなり簡単です。あなたは、そのファイルの_line上の 'Object'ではなく' String'であるものに対してメソッドを呼び出しました。 – Sherif

答えて

0

です。 query()を呼び出す変数に正しいオブジェクトが含まれていて、誤ってそれを上書きしていないことを確認できますか?

+0

これを上書きしますか? – KayzMark

+0

間違って$ this-> link = 'abc'と後でコード$ this-> link-> query() – Bolivir

+0

こんにちは@Bolivir、質問は理解できないので、 。 StackOverflowはデバッグの手助けをする場所ではありません。ヘルプセンターで[よくある回答を書くにはどうすればいいですか](http://stackoverflow.com/help/how-to-answer)を確認してください。ありがとう! – Sherif

0

@Bolivirが正しい:エラーは$this-linkがオブジェクトではなく文字列であるために表示されます。

$this->link = $db_connection->connect();は、接続の代わりに文字列を返すこともできます(たとえば、間違った資格情報を入力した場合やデータベースが停止した場合など)。

$db_connectionを参照してください。私はあなたが使用しているDBラッパーを知らないので、ちょっと試してみてください。

dbConnection::connect()の方法はどのように見えますか?

+0

'パブリック関数は、(){ \t \t \t試し{ \t \t \t \tます$ this-> db_conn =新しいPDO(接続:;、 "mysqlのホスト=の$ this - > DB_HOST DBNAME =の$ this - > DB_NAME" $この - > db_user、$ this-> db_pass); \t \t \t \t return $ this-> db_conn; \t \t \t} \t \t \tキャッチ(PDOExceptionする$ E) \t \t \t { \t \t \t \tリターン$ E->のgetMessage()。私の推測では、あなたが戻って 'PDO'オブジェクトを取得していないということです、あなたの関数を見てみると \t \t \t} \t \t}' – KayzMark

+0

が、エラーメッセージ 'は$ e-> getMessage()の'。あなたのメッセージ(あなたのケースでは 'echo $ this-> link')を読んで、何が間違っているかを知っています。しかし、より良い設計は 'dbConnection'クラスがエラーを投げ、' ManageUsers'クラスがそれをキャッチする場合です。 –

+0

これはより良いです 'public function dbConnection() \t { \t $ this-> conn = null; try \t \t { $ this-> username = $ this-> dbname = "。$ this-> db_name ="。$ this-> >パスワード); \t \t \t $ this-> conn-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION); } \t \t catch(PDOException $ exception) \t \t { echo "接続エラー:"。 $ exception-> getMessage(); } return $ this-> conn; } ' – KayzMark

関連する問題