1

スーパーグローバル mysqli クラスからすべてのメソッドとプロパティを自分の db クラスに継承しようとしています。

DBクラスは次のとおりです。

class DB extends mysqli
{
    protected $mysqli;

    public function __construct () {
        // connect to MySQL
        $mysqli = new mysqli('host', 'username', 'password', 'dbname');

        // output error if unable to connect
        if ($mysqli->connect_errno) {
            echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " .     $mysqli->connect_error;
            exit;
        }
    }
}

メインの Meetings クラスは次のとおりです。

class Meetings
{

    function __construct () {
        require_once('../include/classes/db.class.php');
        $db = new DB();

        $field = $db->real_escape_string($_POST['about']);

    }

}

Meetings クラスでは、スーパーグローバル mysqli クラスによって継承されたインスタンス化された DB クラスを介して real_escape_string メソッドを呼び出せるようにしたいと考えています。

次のエラーが表示されます: 警告: mysqli::real_escape_string() [mysqli.real-escape-string]: DB をフェッチできませんでした

4

1 に答える 1

0

おっとっと!DB オブジェクトを作成し、db オブジェクトは mysqli クラスの別のインスタンスを作成します。新しい mysqli を呼び出すべきではありませんが、呼び出す必要があります

parent::__construct('host', 'username', 'password', 'dbname')

また

    parent::mysqli('host', 'username', 'password', 'dbname')

mysqli コンストラクターに適した形式がどれかわかりません。

この後、DB クラスの mysql プロパティは必要ありません。この状況では、mysqli プロパティは DB クラスの $this と等しいからです。つまり、$mysqli->connect_errno ではなく、$this->connect_errno が正しいのです。

于 2012-05-23T23:04:41.437 に答える