在OOP php中获取查询错误

在OOP php中获取查询错误,php,mysql,oop,Php,Mysql,Oop,我刚刚开始使用OOP php,我很难弄清楚如何使用类方法在数据库中进行查询。这是我的代码,我有一个错误,我不知道如何解决 我声明了连接变量,但不知道为什么它是未定义的 注意:未定义变量:connection 致命错误:对中的非对象调用成员函数query() db.php class DbConnector { private $serverName; private $userName; private $password; private $dbName; pr

我刚刚开始使用OOP php,我很难弄清楚如何使用类方法在数据库中进行查询。这是我的代码,我有一个错误,我不知道如何解决

我声明了连接变量,但不知道为什么它是未定义的


注意:未定义变量:connection

致命错误:对中的非对象调用成员函数query()

db.php

class DbConnector {

   private $serverName;
   private $userName;
   private $password;
   private $dbName;
   private $connection;

   public function __construct(){
      $this->serverName = "localhost";
      $this->userName = "root";
      $this->password = "attl";
      $this->dbName = "oop";

      $this->connection = new mysqli($this->serverName, $this->userName, $this->password, $this->dbName);

      if ($this->connection->connect_error) {
          $this->connection = die("Connection failed: " . $this->connection->connect_error);
      } 
  }

  public function getConnection(){
      return $this->connection;
  }
}
index.php

include('../queries/db.php');

class Users{

  private $connection;

  public function __construct(){
      $con = new DbConnector();
      $connection = $con->getConnection();
  }
  public function getUsers(){
      $sql = $connection->query("SELECT * FROM login");

      while($getUsers = $sql->fetch_array()){
          echo $getUsers['username'];
      }
  }

}

$user = new Users();
return $user->getUsers();

您的问题是您试图访问一个局部范围的变量,而不是类属性

public function getUsers(){
  $sql = $connection->query("SELECT * FROM login"); // HERE

  while($getUsers = $sql->fetch_array()){
      echo $getUsers['username'];
  }
}
在该范围内找不到名为
$connection
的变量,您需要使用
$this
访问对象属性

class Users {

  private $connection;

  public function __construct()
  {
      $con = new DbConnector();
      // Assign this to object propety declared above 
      $this->connection = $con->getConnection();
  }

  public function getUsers()
  {
      // now access the object property set in constructor.
      $sql = $this->connection->query("SELECT * FROM login");

      while($getUsers = $sql->fetch_array()){
          echo $getUsers['username'];
      }
  }
}

因为您将以下内容声明为私有:
private$connection

并将其包含在您的结构中:

  public function __construct(){
      $con = new DbConnector();
      $connection = $con->getConnection();
您需要对其属性使用
$this

$this->connection = $con->getConnection();
然后改变:

$sql = $connection->query

以使用连接属性


现在,我不得不承认我不是OOP专家,可能有另一种方法可以解决这个问题,但这就是我从中得到的,这对我很有用。

在@hanky panky上面标记的链接上有很大的不同原始问题说
我收到错误通知:未定义变量:第13行的C:\xampp\htdocs\oop\views\index.php中的连接
所以我知道它上面的重复标志是什么可以帮助您快速解决问题。您会遇到什么错误?是的,谢谢这是非常不同的,因为寻找链接不是类OOP方法@HankyPankyNotice:未定义变量:第13行C:\xampp\htdocs\oop\views\index.php中的连接致命错误:在第13行C:\xampp\htdocs\oop\views\index.php中对非对象调用成员函数query()。我不知道,但连接已声明@MUNISHKUMARThanks Free-ii-我只是重新编写代码并运行它。如果你再看到我的另一个问题。。哈哈,跟这里不一样。但另一个问题更多的是关于控制器,我不知道它是如何工作的。我只是想慢慢地学习MVC。TBH,在看到其他答案之前,我已经写了这个。我不是在这里踢代表,哈哈,我只是说@我很高兴你找到了完整的解决方案。欢迎你加入啦啦队,安德鲁。正如我早些时候告诉OP的那样;我没有看到你的答案贴在这里,我问她这个问题是否还有待解决,所以我花时间测试它,找出她哪里出错了,并且正在把它全部打印出来。你的回答很好地解释了这一点。
$sql = $this->connection->query