1

あるメソッドで作成されたオブジェクト (MySQL 接続) を同じクラス内の別のメソッドに渡す正しい方法を理解するのに助けが必要です。

コンストラクターと他のすべてのメソッドを使用して接続をロードするデータベース クラスを作成しようとしています。この接続を使用して、それぞれの機能を実行します。

そうしようとしている間、私はこのエラーを受け取り続けます:

致命的なエラー: 44 行目の /database.php の非オブジェクトに対するメンバー関数 query() の呼び出し

私のコード:

class database
{ 
    public $mysqli;

    public function __construct($database_server, $database_name, $database_user, $database_pass)
    {
        $mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

        if ($mysqli->connect_error)
        {
                  die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
        }
        echo "Database connection established successfully.<br>";
        return $this->mysqli;

    }

    public function fetch_data()
    {

        $query = "select * from payment";
        if ($result = $this->mysqli->query($query))
        {

            // fetch associative array
            while ($row = $result->fetch_assoc())
            {
                printf ("%s (%s)\n", $row["id"], $row["status"]);
            }

        }

    }
}

どんな助けでも大歓迎です。みんなありがとう。

4

4 に答える 4

1

あなたはどこにも設定していません、あなたはあなたの構成の代わりに設定$this->mysqliする必要があります。$this->mysqli = $mysqli;return $this->mysqli

于 2012-09-16T11:38:50.197 に答える
1
public function __construct($database_server, $database_name, $database_user, $database_pass)
{
    $mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

    if ($mysqli->connect_error)
    {
              die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    }
    echo "Database connection established successfully.<br>";

    // instead of return, just set the local variable to the `mysqli` property.
    $this->mysqli = $mysqli;

}

または

public function __construct($database_server, $database_name, $database_user, $database_pass)
{
    $this->mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

    if ($this->mysqli->connect_error)
    {
       die('Connect Error (' . $this^>mysqli->connect_errno . ') '. $this->mysqli->connect_error);
    }
    echo "Database connection established successfully.<br>";    
}

そして、public $mysqli;なる方が良いでしょうprotected

于 2012-09-16T11:38:33.127 に答える
0

クラスのプロパティとして実際に$mysqliを作成しているわけではありません。

必要なもの:

class database
{

public $mysqli;

public function __construct($database_server, $database_name, $database_user, $database_pass)
{
    $this->mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

    if ($this->mysqli->connect_error)
    {
              die('Connect Error (' . $this->mysqli->connect_errno . ') '. $this->mysqli->connect_error);
    }
    echo "Database connection established successfully.<br>";
    return $this->mysqli;

}

また

class database
{

public $mysqli;

public function __construct($database_server, $database_name, $database_user, $database_pass)
{
    $mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

    if ($mysqli->connect_error)
    {
              die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
    }
    echo "Database connection established successfully.<br>";
    $this->mysqli = $mysqli;
    return $this->mysqli;

}
于 2012-09-16T11:38:52.067 に答える
0

他の人がすでに述べたように、mysqli を次のように設定する必要があります。

$this->mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

コンストラクターで死なないことをお勧めします。それは、決定するのはデータベース クラスではなく、データベース クラスのユーザーです。次のように変更します。

class database
{ 
    private $mysqli;
    public $error = false;

    public function __construct($database_server, $database_name, $database_user, $database_pass)
    {
        $this->mysqli = new mysqli($database_server,$database_user, $database_pass, $database_name);

        if ($mysqli->connect_error)
          $this->error = 'Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);

    }

このようなデータベースを構築するとき$db = new Database( ... );は、エラー プロパティを確認してから、何をすべきかを決定できます。

于 2012-09-16T11:47:25.360 に答える