【问题标题】:PHP call class method in another file [duplicate]PHP在另一个文件中调用类方法[重复]
【发布时间】:2014-05-06 10:15:07
【问题描述】:

我有两个文件,一个文件有一个类和一个连接数据库的方法,第二个文件有一个登录用户的类,当然我需要调用第二个文件中的类和方法来允许登录。

我遇到的问题是当我调用包含要连接的类和方法的文件时未定义。

文件 1“连接详细信息”

    <?php

class dbConnect{

    protected $host = 'localhost';
    protected $user = 'root';
    protected $pass = 'root';
    protected $db = 'bolt_mail';

    public function connect(){
        $con = mysqli_connect($this->host,$this->user,$this->pass,$this->db) or die('Cannot Connect to DB');
        return $con;
    }

}

文件 2“登录”

class login{

public function con(){
    include ('connect.php');

    $db = new dbConnect();
    $db->connect();

     return $db;
}

public function getLogin($email, $pass){



    $sql = "SELECT ott_email, ott_password ,app_password , user_status, account_type FROM tbl_user WHERE ott_email='$email' AND app_password='$pass'";
    $query = mysqli_query($this->con(), $sql);
    $count = mysqli_num_rows($query);

错误:

    Warning: mysqli_query() expects parameter 1 to be mysqli, object given in /Applications/MAMP/htdocs/project_ott/php/login.php on line 38

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /Applications/MAMP/htdocs/project_ott/php/login.php on line 39

谁能看到我做错了什么...?

【问题讨论】:

  • 你必须返回$db-&gt;connect();的返回值,而不是$db
  • @sanketh 你在哪里看到属性 $con ?

标签: php mysqli


【解决方案1】:

试试这个,

public function con(){
    include ('connect.php');

    $db = new dbConnect();
   $conn =  $db->connect();

     return $conn ;
}

您正试图返回类 dbConnect 的对象,而不是函数 connect 的返回。另外你的数据库连接设计需要改进,看看单例模式

【讨论】:

    【解决方案2】:

    移动这个字符串

    include ('connect.php');
    

    到你的第二个文件的顶部,换句话说,在类登录之外。 而这个字符串:

    $db->connect();
    
    return $db;
    

    改为:

    return $db->connect();
    

    【讨论】:

      【解决方案3】:

      如第一个警告所示,mysqli_query() 期望参数 1 是 mysqli,而不是其他对象(在您的情况下,con 返回的是您的 dbConnect 对象)。由于您从connect 方法返回mysqli 连接,因此您应该在con 函数中返回相同的连接以供mysqli_query() 使用。试试这个...

      class login{
      
      public function con(){
          include ('connect.php');
      
          $db = new dbConnect();
          return $db->connect();
      }
      

      【讨论】:

      • aaaa 这太完美了......!我虽然如果我只是返回 $db 变量,我会没事的,但我没有这样做……你能向我解释为什么它不像我那样工作吗……?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2018-04-02
      • 2013-07-19
      • 2017-06-21
      • 1970-01-01
      • 2011-03-07
      相关资源
      最近更新 更多