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ć?