0

クラスを PHP の mysqli クラスに拡張したクラスを作成しましたが、これらのエラーを見て実際にショックを受けました

Warning: Missing argument 1 for BeatBeast_Database::__construct(), called in C:\xampp\htdocs\beatbeast\login.php on line 11 and defined in C:\xampp\htdocs\beatbeast\includes\Db\BeatBeast_Db.php on line 6

Warning: Missing argument 2 for BeatBeast_Database::__construct(), called in C:\xampp\htdocs\beatbeast\login.php on line 11 and defined in C:\xampp\htdocs\beatbeast\includes\Db\BeatBeast_Db.php on line 6

Warning: Missing argument 3 for BeatBeast_Database::__construct(), called in C:\xampp\htdocs\beatbeast\login.php on line 11 and defined in C:\xampp\htdocs\beatbeast\includes\Db\BeatBeast_Db.php on line 6

Warning: Missing argument 4 for BeatBeast_Database::__construct(), called in C:\xampp\htdocs\beatbeast\login.php on line 11 and defined in C:\xampp\htdocs\beatbeast\includes\Db\BeatBeast_Db.php on line 6

ここに BeatBeast_Db.php があります

<?php
    class BeatBeast_Database extends mysqli
    {

        protected $r = 'Something';
        public function __construct($db_host,$db_username,$db_password,$db_name)
        {
            parent::__construct($db_host,$db_username,$db_password,$db_name);

            if(mysqli_connect_error())
            {
                die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error());
            }
        }

        public function close()
        {
            $this->close();
        }

    }

    require_once("db_constants.inc.php");
    $conn = new BeatBeast_Database("localhost", "root", "myPass", "beatbeast");

これは私のlogin.phpです

<?php require_once("./includes/Utilities.php") ;?>
<?php require_once("./includes/Db/DatabaseUtilities.php"); ?>
<?php require_once("./includes/Db/Accounts.php");?>
<?php require_once("./includes/Db/BeatBeast_Db.php"); ?>

<?php 
    if(isset($_POST['submit'])){
        require_once("./includes/process_form.inc.php");

        $hashedPass = crypt($password,$username);
        $accounts = new Accounts();
        $accounts->showMessage();

そして11行目は

$accounts = new Accounts();

皆さんが興味を持っているなら、ここに私の Accounts クラスがあります

require_once("BeatBeast_Db.php");

Class Accounts extends BeatBeast_Database
{
    private $accnt_id;
    private $username;
    private $email;

    function info()
    {

        echo "{$this->accnt_id} {$this->username} {$this->email}";
    }

    public static function getIdByUsername($username)
    {
        global $conn;
        $sql = "SELECT accnt_id FROM accounts WHERE username = '{$username}'";
        $rs = $conn->query($sql);
        $found = $rs->fetch_array();
        return $found;
    }

    public function showMessage(){
        echo "{$this->r}";
    }

    public static function getUsernameById($id)
    {
        global $conn;
            $sql = "SELECT username FROM accounts WHERE accnt_id = $id ";
        $rs = $conn->query($sql);
        $found = $rs->fetch_array();
        return $found;
    }

    public function getAccntId()
    {
        return $this->accnt_id;
    }

    public function getUsername()
    {
        return $this->username;
    }

    public function getEmail()
    {
        return $this->email;
    }
}
4

2 に答える 2

1

MySQLi の PHP リファレンス (http://www.php.net/manual/en/class.mysqli.php) を見ると、元のクラス コンストラクターには 6 つのパラメーターが含まれています。

__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )

MySQLi を拡張するときは、たとえ使用していなくても、それらすべてを定義する必要があります。ただし、それが警告エラーの原因ではありません。

あなたの場合、$accounts = new Accounts();引数を定義せずに呼び出しています。ただし、Accountsクラスの範囲はBeatBeast_Database. BeatBeast_Databaseしたがって、すべてのコンストラクタ パラメータ ( )を渡す必要があります$db_host,$db_username,$db_password,$db_name

于 2012-06-27T01:23:19.553 に答える
0

login.php の 11 行目から始めましょう

$accounts = new Accounts();

Accountsこれは、何も定義されていないクラスのコンストラクターを呼び出します。以来

Class Accounts extends BeatBeast_Database

BeatBeast_DatabasePHP は、クラスのコンストラクターにフォールバックします。

public function __construct($db_host,$db_username,$db_password,$db_name)

これには 4 つのパラメーターが必要ですが、何も取得されません。まさにエラー メッセージの内容です。login.phpの 11 行目をに変更する必要があります。

$accounts = new Accounts(DB_HOST, DB_USER, DB_PASSWD, DB_NAME);

または、定義した定数db_constants.inc.phpは clled です。

于 2012-06-27T01:34:18.670 に答える