Przekazanie zapytania do bazy do funkcji w klasie: ten sam kod zachowuje się różnie w zależności czy jest w funkcji czy nie

0

Mam pewien obiekt HTML ładujące dane z bazy danych:

<select class="my_select_box" data-placeholder="Select Your Options">
                        <?php 
                        $sql2 = "SELECT * FROM `owners` ";
                        $result2 = $conn->query($sql2) or die(mysqli_error($conn));
                        ?>
                        <?php while($row2 = $result2->fetch_array()): ?>
                            <option><?= $row2["Name"] ?></option>
                        <?php endwhile ?>
                    </select>

Powyższy kod pobierający dane z bazy danych chciałbym przenieść do osobnej klasy:

// getting_data.php:

class DataLoader{

    private $ownersCache;
    private $conn;

    function __construct($conn)
    {
        $this->conn = $conn;

        if ($this->conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
    }

    function loadOwners(){
        //clog("$this->ownersCache");
        if(!is_null($this->ownersCache))
            clog($this->ownersCache->fetch_array());
        else    
            clog("null");

        $sql = "SELECT * FROM `owners`";
        if(is_null($this->ownersCache)){
            
            $this->ownersCache = $this->conn->query($sql) or die(mysqli_error($this->conn));
        }

        return $this->conn->query($sql) or die(mysqli_error($this->conn));
    }
}

HTML używający klasy wygląda wtedy tak:

include 'parts/getting_data.php';
$dataLoader = new DataLoader($conn);
[...]
<select class="my_select_box" data-placeholder="Select Your Options">
                        <?php 
                        $sql2 = "SELECT * FROM `owners` ";
                        $result2 = $conn->query($sql2) or die(mysqli_error($conn));
                        ?>
                        <?php while($row2 = $dataLoader->loadOwners($conn)->fetch_array()): ?>
                            <option><?= $row2["Name"] ?></option>
                        <?php endwhile ?>
                    </select>

Niestety, mimo że w zasadzie robię to samo (funkcja zwraca dokładnie to samo zapytanie którego używałem wcześniej), to w przypadku drugiej wersji pojawia się błąd:

Fatal error: Uncaught Error: Call to a member function fetch_array() on bool in /var/www/html/app/permissions.php on line 100

Ma ktoś pomysł o co może chodzić?

0

To znaczy, że w pliku permissions.php w linii 100 przekazujesz do funckji fetch_array() wartość typu bool :)

A tak na serio to nie wiem co jest w pliku permissions.php i gdzie jest odwołanie do tego pliku. Moim zdaniem problem jest tu:

if(!is_null($this->ownersCache))
            clog($this->ownersCache->fetch_array());
        else    
            clog("null");

1 użytkowników online, w tym zalogowanych: 0, gości: 1