2016-08-19 139 views
-4

所示的错误是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

Hi @KayzMark,欢迎来到StackOverflow。请确保包含一个明确的__problem声明___以确定您在将来发布问题时究竟需要什么帮助。请确保您查看[帮助中心](http://stackoverflow.com/help)以获取[mcve](http://stackoverflow.com/help/mcve)和[我应该避免哪些类型的问题问](http://stackoverflow.com/help/dont-ask)供将来参考。您提供的错误消息非常简单。您在该文件的_line 22_上调用了一个属于“String”而不是“Object”的方法。 – Sherif

回答

0

您probaly呼吁​​一个字符串,而不是对象。你能否验证你调用query()的变量是否包含正确的对象,而不是错误地重写它?

+0

覆盖它? – KayzMark

+0

错误$ this - > link ='abc'以及后面的代码$ this - > link - > query() – Bolivir

+0

Hi @Bolivir,这个答案应该是一个评论,因为需要进一步的讨论来理解这个问题。请记住,StackOverflow不是获得调试帮助的地方。请务必在帮助中心查看[我如何写出一个好答案](http://stackoverflow.com/help/how-to-answer),以备将来参考。谢谢! – Sherif

0

@Bolivir是正确的:你得到的错误是因为$this-link是一个字符串,而不是一个对象。

难道$this->link = $db_connection->connect();也可以返回一个字符串而不是连接(例如,当您输入错误凭证或数据库关闭时)?

或者不应该$this->link请参考$db_connection?只是在这里尝试一些东西,因为我不知道你使用的是什么数据包封装。

dbConnection::connect() -method是什么样的?

+0

'公共功能连接(){ \t \t \t尝试{ \t \t \t \t $这个 - > db_conn =新PDO( “mysql的:主机= $这个 - > DB_HOST; DBNAME = $这个 - > DB_NAME”,这$ - > DB_USER,$这个 - > 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(); \t \t \t} \t \t}' – KayzMark

+0

在你的功能来看我的猜测是,你没有得到一个'PDO'对象返回,但错误信息'$ E->的getMessage()'。阅读你的消息(在你的案例中'echo $ this-> link'),你知道什么是错的。但更好的设计是,如果你的'dbConnection'类抛出一个错误,你的'ManageUsers'类捕获它。 –

+0

所以这是更好的权利'公共功能dbConnection() \t { \t $ this-> conn = null; 尝试 \t \t {this-> conn = new PDO(“mysql:host =”。$ this-> host。“; dbname =”。$ this-> db_name,$ this-> username,$ this- >密码); \t \t \t $ this-> conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION); } \t \t赶上(PDOException $除外) \t \t { 回声 “连接错误”。 $ exception->的getMessage(); } return $ this-> conn; }' – KayzMark