【问题标题】:Stuck with mysqli class in PHP [closed]卡在 PHP 中的 mysqli 类 [关闭]
【发布时间】:2013-06-06 16:02:03
【问题描述】:

我对使用 PHP 进行面向对象编程还很陌生,无法弄清楚为什么下面的代码不起作用。任何帮助将不胜感激!

public function connect() {
  $db = new mysqli($this->host,$this->username,$this->password,$this->database);

  if ($db->connect_errno){
    echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;}

  return $this->buildDB();
}

private function buildDB() {
  $sql = "CREATE TABLE IF NOT EXISTS news (
        title   VARCHAR(150),
        body    TEXT,
        created   VARCHAR(100))";

  $db->query($sql);

  return true;
}

执行时出现以下错误:

注意:未定义变量:第 25 行 C:\xampp\htdocs\SimpleCMS\cms.php 中的 db

致命错误:在第 25 行对 C:\xampp\htdocs\SimpleCMS\cms.php 中的非对象调用成员函数 query()

【问题讨论】:

  • 您的问题不在于 OOP,而在于您的 $db 变量的范围(仅存在于您的 connect() 函数中,而不存在于您的 buildDB() 函数中)。
  • @YourCommonSense 哦不,又是一个傲慢的评论。

标签: php mysql database mysqli scope


【解决方案1】:

$db 变量不在buildDB() 的范围内。您需要将其声明为类的成员,以便类中的所有方法都可以使用它:

class DB {
    private $db;

    public function connect() {
        $this->db = ...;
        ...
    }

    private function buildDB() {
        ...
        $this->db->query(...);
    }
}

【讨论】:

    【解决方案2】:

    看起来您正在使用类进行编程。最合乎逻辑的做法是拥有一个保存连接的变量。像这样:

    private $db; // Variable to hold the database-connection
    
    public function connect() {
        $this->db = new mysqli($this->host,$this->username,$this->password,$this->database);
    
        if ($this->db->connect_errno) {
            echo "Failed to connect to MySQL: (" . $this->db->connect_errno . ") " . $this->db->connect_error;
        }
        else {
            $this->buildDB();
        }
    }
    
    private function buildDB() {
        $sql = "CREATE TABLE IF NOT EXISTS news (
            title   VARCHAR(150),
            body    TEXT,
            created   VARCHAR(100))";
        $this->db->query($sql);
    }
    

    【讨论】:

      【解决方案3】:

      $db 不在 buildDB 函数的范围内。将变量添加到您的类中:

      private $db;

      并将您对$db 的所有引用替换为$this->db

      【讨论】:

      • 感谢您的所有回答,已整理好,感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      相关资源
      最近更新 更多