Получить ошибку «query () on null» при попытке отобразить базу данных с использованием PDO OOP Class? - PullRequest
0 голосов
/ 25 сентября 2018

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

Успешно подключен Неустранимая ошибка: необработанная ошибка: вызов функции-члена query () для null в index5.php: 29 Трассировка стека: # 0 index5.php (44): пользователь->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();

?>

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

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

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

Во-вторых, вы объединяете в цепочкуфункция к результату функции 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 голосов
/ 25 сентября 2018

Метод 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...