0

我对使用 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()

4

3 回答 3

4

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

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);
}
于 2013-06-10T21:47:10.323 回答
2

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

private $db;

并将所有引用替换$db$this->db

于 2013-06-10T21:46:19.350 回答
1

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

class DB {
    private $db;

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

    private function buildDB() {
        ...
        $this->db->query(...);
    }
}
于 2013-06-10T21:48:39.537 回答