php mysqli“没有数据库选择”使用类

时间:2014-09-06 14:27:06

标签: 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时出错了。 connectDB没有给出任何错误,所以我连接到DB。但是当尝试进行任何查询时,它会给我“没有数据库选择错误” index.php的结果是:错误1046未选择数据库

的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个星期,但几天都找不到答案。我猜答案很明显,但我看不出来。 感谢您的时间和耐心。

2 个答案:

答案 0 :(得分:0)

看起来你是一个副本,并且会粘贴受害者。在doQuery()中更改:

if($this->query = $this->mysqli->query($queryText)) {
        $results = $query->fetch_array();

要:

if($this->query = $this->mysqli->query($queryText)) {
        $results = $this->query->fetch_array();

答案 1 :(得分:0)

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

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

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

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

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

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

您可以在php手册中阅读有关variable scope

的更多信息