PHP错误"未定义属性:MyDB::$dbo in"


PHP error "undefined property: MyDB::$dbo in"

我有在mydb.php:

<?PHP
class MyDB extends mysqli
{
    //Tutaj treść metod getQuerySingleResult, getQueryResultAsTableRows,                             getPagination
    function getQuerySingleResult($query)
    {
        //Brak obiektu $dbo
        if(!$this->dbo) return false;
        //Wykonanie zapytania
        if(!$result = $this->dbo->query($query)){
            //echo 'Wystąpił błąd (getQuerySingleResult): nieprawidłowe     zapytanie...';
            return false;
        }
        if($row = $result->fetch_row()){
            //Zwrócenie wyniku
            return $row[0];
        }
        else{
            //Brak wyników zapytania
            return false;
        }
    }
    function getQueryResultAsTableRows($query, $colNames = false)
    {
        //Brak obiektu $dbo
        if(!$this->dbo) return false;
        //Odrzucone zapytanie
        if(!$result = $this->dbo->query($query)) return false;
        if(!$columns = $result->fetch_fields()) return false;
        //Zmienna przechowująca wynik działania metody
        $str = '';
        //Uzyskanie nazw kolumn, o ile są potrzebne
        $colsNo = count($columns);
        if($colNames){
            $str .= '<tr>';
            foreach($columns as $col){
                $str .= '<td>' . $col->name . '</td>';
            }
            $str .= '</tr>';
        }
        //Uzyskanie wyników zapytania
        while($row = $result->fetch_row()){
            $str .= "<tr>";
            foreach($row as $val){
                $str .= "<td>$val</td>";
            }
            $str .= "</tr>";
        }
        //Zwrócenie ostatecznego wyniku
        return $str;
    }
    function getPagination($page, $pages, $link, $msg)
    {
        $str = '';
        for($i = 0; $i < $pages; $i++){
            if($i != $page){
                $str .= "<a href='"$link&amp;page=$i'">".($i+1)."</a>";
            }
            else{
                $str .= '<span class="activePaginationPage">' . ($i+1)
                    . '</span>';
            }
            $str .= '<span class="space"> </span>';
        }
        $str = $msg . $str;
        return $str;
    }
}
?>

<?php
class Basket
{
    private $dbo = null;
    function __construct($dbo)
    {
        $this->dbo = $dbo;
        //Utworzenie koszyka, jeśli to konieczne
        if(!isset($_SESSION['basket'])){
            $_SESSION['basket'] = array();
        }
    }
    function add()
    {
        //Sprawdzenie poprawności parametru id
        if(!isset($_GET['id'])){
            return FORM_DATA_MISSING;
        }
        if(($id = intval($_GET['id'])) < 1){
            return INVALID_ID;
        }
        //Sprawdzenie, czy istnieje książka o podanym id
        $query = "SELECT COUNT(*) FROM ksiazki WHERE id=$id";
        if(!$this->dbo->getQuerySingleResult($query)){
            return INVALID_ID;
        }
        //Zapisanie identyfikatora książki w koszyku
        if(isset($_SESSION['basket'][$id])){
            $_SESSION['basket'][$id]++;
        }
        else{
            $_SESSION['basket'][$id] = 1;
        }
        return ACTION_OK;
    }
    function show($msg, $allowModify = true)
    {
        echo '<div id="basketDiv">';
        if(count($_SESSION['basket']) == 0){
            echo 'Koszyk jest pusty.';
        }
        else{
            //Pobranie listy identyfikatorów dla warunku zapytania
            $ids = implode(',', array_keys($_SESSION['basket']));
            //Pobranie danych dotyczących książek z koszyka
            $query = 'SELECT `id`, `tytul`, `cena` FROM ksiazki ';
            $query .= 'WHERE id IN('.$ids.') ORDER BY `tytul`';
            if($result = $this->dbo->query($query)){
                echo '<form action="index.php?action=modifyBasket" method="post">';
                echo '<table>';
                //Górny wiersz tabeli z komunikatem z $msg
                echo '<tr><td colspan="4" class="textMiddle">'.$msg.'</td></tr>';
                //Nagłówki kolumn
                echo '<tr><th>Tytuł</th><th class="textRight">Cena</th>';
                echo '<th class="textRight">Liczba</th><th class="textRight">';
                echo 'Wartość</th></tr>';
                //Odczytanie wyników zapytania
                $suma = 0;
                while($row = $result->fetch_row()){
                    //Wyświetlanie zawartości koszyka
                }
                //Formatowanie sumy zamówienia
                $suma = sprintf("%01.2f", $suma);
                echo '<tr><td colspan="3">Całkowita wartość</td>';
                echo '<td class="textRight">'.$suma.'</td></tr>';
                if($allowModify){
                    echo '<tr><td colspan="4" class="textRight"><input type="submit"';
                    echo 'value="Zapisz zmiany"></td></tr>';
                }    
                echo '<tr><td colspan="4" class="textRight">';
                if($allowModify){
                    //Odnośnik do podsumowania zamówienia
                    echo '<a href="index.php?action=checkout">Do kasy</a>';
                }
                else{
                    //Odnośnik do zapisywania zamówienia w systemie
                    echo '<a href="index.php?action=saveOrder">';
                    echo 'Złóż zamówienie</a>';
                }
                echo '</td></tr>';
                echo '</table>';
            }
            else{
                echo 'Błąd serwera. Zawartość koszyka nie jest dostępna.';
            }
        }
        echo '</div>';
    }
    function modify()
    {
        foreach($_SESSION['basket'] as $key => $val){
            if(!isset($_POST[$key])){
                unset($_SESSION['basket'][$key]);
            }
            else if(intval($_POST[$key]) < 1){
                unset($_SESSION['basket'][$key]);
            }
            else{
                $_SESSION['basket'][$key] = intval($_POST[$key]);
            }
        }
    }
    function saveOrder(&$orderId)
    {
        //Sprawdzenie, czy koszyk ma zawartość
        if(count($_SESSION['basket']) < 1){
            return EMPTY_BASKET;
        }
        //Sprawdzenie, czy użytkownik jest zalogowany
        if(!isset($_SESSION['userId'])){
            return LOGIN_REQUIRED;
        }
        //Pobranie identyfikatorów książek z koszyka
        $ids = implode(',', array_keys($_SESSION['basket']));
        $userId = $_SESSION['userId'];
        //Wyłączenie automatycznego zatwierdzania transakcji
        $this->dbo->autocommit(false);
        //Utworzenie nowego zamówienia
        $query = 'INSERT INTO zamowienia ';
        $query .= "VALUES(0, $userId, NOW(), NULL, 0)";
        if(!$this->dbo->query($query)){
            return SERVER_ERROR;
        }
        if(($orderId = $this->dbo->insert_id) < 1){
            return SERVER_ERROR;
        }
        //Pobranie aktualnych cen książek
        $query = "SELECT id, cena FROM ksiazki WHERE id IN($ids) ";
        if(!$result = $this->dbo->query($query)){
            return SERVER_ERROR;
        }
        //Zapisanie danych do tabeli KsiazkiZamowienia
        while($row = $result->fetch_row()){
            $id = $row[0];
            $cena = $row[1];
            $ile = $_SESSION['basket'][$row[0]];
            $query = "INSERT INTO ksiazkizamowienia VALUES($id, $orderId, ";
            $query .= "$ile, $cena)";
            //Jeśli nie udało się wykonać zapytania:
            if(!$this->dbo->query($query)){
                return SERVER_ERROR;
            }
            //Jeśli liczba dodanych rekordów jest inna niż 1:
            if($this->dbo->affected_rows <> 1){
                return SERVER_ERROR;
            }
        }
        //Zatwierdzenie transakcji
        $this->dbo->commit();
        //Wyczyszczenie koszyka
        $_SESSION['basket'] = array();
        return ACTION_OK;
    }
}
?>

为什么我有错误

注意:未定义属性:MyDB::$dbo在C:'xampp'htdocs..' MyDB .php第8行/

请帮帮我。我不知道我该怎么处理这个?

由于MyDB扩展了mysqli,因此不需要单独的属性来保存数据库连接。mysqli对象本身表示连接,因此您可以在整个代码中使用$this而不是$this->dbo