Я получаю еще одну ошибку с этим кодом. Это:

Подключено успешно Неустранимая ошибка: Неперехваченная ошибка: вызов функции-члена query () по null в index5.php: 29 Трассировка стека: # 0 index5.php (44): User-> getAllUsers () # 1 index5.php (55) : ViewUser-> showAllUsers () # 2 {main} добавлено в index5.php в строке 29

Я пытаюсь вывести данные из моей таблицы базы данных под названием "indeximg", но этот код дает мне указанную выше ошибку. Я не знаю, как это исправить. Это мой код:

<?php 
class Database {

	private $host = 'localhost';
	private $db_name = 'photos';
	private $username = 'root';
	private $password = '';
	private $conn;

	protected function connect() {	

		try {
			$this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
			$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			echo "Connected successfully"; 
		} catch(PDOException $e) {
			echo 'Connection Error: ' . $e->getMessage();
		}

		$this->conn = null;
	}

}

class User extends Database {
	
	protected function getAllUsers() {
		$sql = "SELECT * FROM indeximg";
		$result = $this->connect()->query($sql);
		$numRows = $result->num_rows;
		if ($numRows > 0) {
			while ($row = $result->fetch_assoc()) {
				$data[] = $row;
			}
			return $data;
		}
	}

}

class ViewUser extends User {
	
	public function showAllUsers() {
		$datas = $this->getAllUsers();
		foreach ($datas as $data) {
			echo $data['id']."<br>";
			echo $data['username']."<br>";
		}
	}

}


$users = new ViewUser();
$users->showAllUsers();

?>
0
codo7081 25 Сен 2018 в 23:09

2 ответа

Лучший ответ

В вашей функции connect() есть несколько проблем:

Во-первых, вы устанавливаете $this->conn как null, даже если он успешно подключается.

Во-вторых, вы связываете функцию с результатом функции connect(), которая ничего не возвращает:

protected function connect() 
{   
    try {
        $this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
        $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";
    } catch(PDOException $e) {
        die('Connection Error: ' . $e->getMessage()); // Or do something else to handle the error
    }

    return $this->conn; 
}
0
Salvatore Q Zeroastro 25 Сен 2018 в 20:20

Query () вызывается из null, потому что вы ничего не возвращаете из функции connect (). Добавьте строку, как показано в комментарии.

protected function connect() {  

try {
    $this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
    $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
    return $this->conn;//Add this line
} catch(PDOException $e) {
    echo 'Connection Error: ' . $e->getMessage();
}

$this->conn = null;
}
1
Prakash S 25 Сен 2018 в 20:17