php mysqli "No database selected"使用类

标签 php mysql class mysqli

当我在没有类的情况下使用 mysqli 时,一切正常:

index.php

require_once(dirname(__FILE__) . '/config.php');

$mysqli = new mysqli($hostname, $username, $password, $dbname);
$queryText = "SELECT * FROM User";
if($query = $mysqli->query($queryText)) {
    $results = $query->fetch_array();
    echo $results['userId'];
} else {
     echo "Error ";
     echo $mysqli->errno . " " . $this->mysqli->error;
}

?>

但是当我开始使用 mysqli 和 class 时,出现了问题。 connectDB 没有给出任何错误,所以我连接到数据库。但是当尝试执行任何查询时,它给我“没有选择数据库错误” index.php的结果是:Error 1046 No database selected

index.php

<?php
require_once(dirname(__FILE__) . '/banana.php');

$banana = new Banana(1);
if ($banana->connectDB()) {
    $banana->doQuery();
}
?>

banana.php

<?php

require_once(dirname(__FILE__) . '/config.php');

class Banana {

     private $mysqli, $userId, $query;

     function __construct($userId) {
          $this->userId = $userId;
     }

     function __destruct() {
        $this->mysqli->close();
     }

     public function connectDB() { // Подключение к БД
          $this->mysqli = new mysqli($hostname, $username, $password, $dbname);
          if ($this->mysqli->connect_errno) {
               echo "Error (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error;
               return false;
          }
          return true;
     }

     public function doQuery() {
        $queryText = "SELECT * FROM User";
        if($this->query = $this->mysqli->query($queryText)) {
            $results = $query->fetch_array();
            echo $results['userId'];
        } else {
            echo "Error ";
            echo $this->mysqli->errno . " " . $this->mysqli->error;
        }
    }

?>

所以这是非常令人沮丧的。我在 php 上学习了大约 2 周,但几天都找不到答案。我想答案是显而易见的,但我看不到。 感谢您的时间和耐心。

最佳答案

运行脚本时遇到的第一个问题如下:

 public function connectDB() { // Подключение к БД
      $this->mysqli = new mysqli($hostname, $username, $password, $dbname);

请注意,您在函数调用中使用的所有 4 个变量($hostname 等)在方法的范围内均未定义。

有几种方法可以解决这个问题:

  • 将变量作为参数传递给方法:
    public function connectDB($hostname, ...
  • 将必要的变量传递给类构造函数,并在类中设置稍后可以使用的配置属性;
  • 使用常量而不是变量;
  • 将变量声明为全局变量。

我会推荐前两个之一,绝对不是最后一个。

您可以在 php 手册中阅读有关 variable scope 的更多信息。 .

关于php mysqli "No database selected"使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701262/

相关文章:

php表单mysql错误到数据库

php - 在 PHP 中初始化静态变量

mysql - 插入后触发更新另一表中的一条记录

php - 为什么执行查询时只更新/删除表的最后一行?

python - Python 类中的数学方法

php 没有从数据库中获取用户信息

php - 如何在php中每行显示4个元素

mysql - 选择两个表之间具有最高值的行,同时还选择分组依据中的其他列

c++ - 实现 C++ 数组类

css - 嵌套 CSS 类?