Wyświetlenie pobranego rekordu z bazy

0

Mam dajmy na to taką metodę. Chciałbym się zapytać jak w zgodzie z zasadami obiektowego programowania w PHP można wyświetlić wynik zapytania za pomocą pętli foreach?

public function getRecord(){
	$query2 = $this->dbHandler->prepare("SELECT * FROM `news`");
	if($query2->execute() == false){
		print_r($query2->errorInfo());
		return false;
		}else{
		return true;
	}
	return true;
}

Proceduralnie to bym zrobił to tak:

  1. Zapytanie(jak wyżej)
  2. Pętla
foreach($query2 as $dataQuery){
    echo $dataQuery;
 }

W jaki sposób to pobrać przy OOP

0

Poprawka, kod wygląda tak ale mimo tego nadal nie wyświetla się pobrana wartość z bazy danych:

public function getRecord(){
	$query2 = $this->dbHandler->prepare("SELECT `topic` FROM `news`");
	if($query2->execute() == false){
		print_r($query2->errorInfo());
		return false;
		}else{
		if ($query2->rowCount() > 0){
			return $query2->fetchAll(PDO::FETCH_ASSOC);
		}
		return true;
	}
	return true;
}

A tak próbuję to wyświetlić:

if ($news->getRecord()) {
	foreach($news as $row){
		echo $row['topic'];
	}
}

I nadal nic się nie wyświetla. Dlaczego?

0

Nic nie wyświetla, bo nie zapisałeś nigdzie zwróconej tablicy.
http://php.net/manual/en/pdostatement.fetchall.php

if ($query2->rowCount() > 0)

To w jakim celu ? Sprawdzać, czy są jakieś dane możesz po ich wybraniu (funkcja count na otrzymanej tablicy).

0

Mam tak:

public function getRecord(){
	$query2 = $this->dbHandler->prepare("SELECT `topic` FROM `news`");
	if($query2->execute() == false){
		print_r($query2->errorInfo());
		return false;
		}else{
		if ($query2->rowCount() > 0){
			return $query2->fetchAll(PDO::FETCH_ASSOC);
		}
		return true;
	}
	return true;
}

I wywołanie:

//Pobieranie rekodru
if ($news->getRecord()) {
	foreach($news->getRecord() as $row){
		echo $row['topic'];
	}
	}else{
	echo '<div class="error">Błąd zapytania!</div>';
}

Dane są pobierane teraz z bazy danych. Co do Twojej uwagi, to nie bardzo rozumiem, w którym miejscu miałbym użyć tamtej instrukcji warunkowej:

if ($query2->rowCount() > 0){ 
   return $query2->fetchAll(PDO::FETCH_ASSOC);  
}

Jak to powinno wyglądać?

0

Jest w stanie mi ktoś to wytłumaczyć?

0

Twoja metoda getRecord pobiera dane z bazy i je zwraca, a nie zapisuje ich nigdzie w obiekcie, zatem twój kod w pętli powinien wyglądać mniej więcej tak:

$records = $news->getRecord();

if (is_array($records)) {
    foreach($records as $singleRecord) {
        echo $singleRecord['topic'];
    }
} else {
   echo '<div class="error">Błąd zapytania!</div>'
}

Sugeruję też zmianę nazwy metody getRecord() na getRecords(), ponieważ pobiera ona nie jeden konkretny wiersz, a wszystkie wiersze z tabeli news.

[Adam]

0

A jak zatem powinna wyglądać metoda? Czy użycie tego:

if ($query2->rowCount() > 0){ 
   return $query2->fetchAll(PDO::FETCH_ASSOC);  
}

w metodzie jest w końcu poprawne czy nie?

0
    	public function getRecord(){
    		$query2 = $this->dbHandler->prepare("SELECT `topic` FROM `news`");
    		if($query2->execute() == false){
    			print_r($query2->errorInfo());
    			return false;
    		} else {
    			// Jeżeli nie będzie rekordów to zwróci false, więc możesz to wykryć w widoku
    			return $query2->fetchAll(PDO::FETCH_ASSOC); 
    		}
    	}

    	//Pobieranie rekodru
    	$news = $newsModel->getRecord();
    	if ($news) {
    		foreach($news as $row){
    			echo $row['topic'];
    		}
    	}else{
    		echo '<div class="error">Przepraszamy, brak rekordów do wyświetlenia</div>';
    	}

Twój kod to straszny burdel. W tej metodzie miałeś 2 niepotrzebne returny i jakiś dziwny else, zamiast elseif. Twoja metoda zwraca wynik i musisz go gdzieś przypisać. To tak jakbyś zrobił:

    	function add(a, b) {
    		return a+b;
    	}
    	if(add(2,2) === 4) {
    		echo wynik;
    	}

Musisz wynik gdzieś przypisać

    	function add(a, b) {
    		return a+b;
    	}

       $wynik = add(2,2);

    	if($wynik === 4) {
    		echo $wynik;
    	}
0

Dziękuję za pomoc. Znowu się czegoś nowego dowiedziałem i nauczyłem.

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