[OOP] PDO Klasse, alle Einträge ausgeben lassen

newwarrior

Erfahrenes Mitglied
Moin Moin,

ich habe ein kleines Prblem, mit einem Script, was ich gerade entwickele.
Und zwar schreibe ich einen kleinen Blog und habe mir dazu eine Klasse geschrieben, um einfach ein wenig OOP zu lernen.

Und zwar möchte, ich jetzt gerne alle Blogeinträge aus meiner DB auslesen und habe dafür folgende Funktion in meiner Klasse:

PHP:
	public function getAll()
	{
		$sth = $this->dbh->prepare('SELECT blog_id, blog, blog_title, blog_author, blog_date, blog_published FROM blog');
		$sth->execute();
		$result = $sth->fetch(PDO::FETCH_OBJ);
		
		return $result;			
	}

Aufrufen, machen ich den ganzen Spaß so:

PHP:
		$blog_obj= new blog($dbh);
		$data_blog = $blog_obj->getAll();
		
		echo '<pre>';
		var_dump($data_blog);

Wie die meisten unter euch jetzt sicherlich bemerkt haben, bekomme ich so nur den ersten Eintrag der DB angezeigt und nicht alle.
Jetzt habe ich folgendes versucht, ich habe mir eine weitere Funktion in der Klasse geschrieben, die mir die Anzahl von allen Einträgen in der DB wieder gibt:

PHP:
	public function getNumber()
	{
		$sth = $this->dbh->prepare('SELECT COUNT(blog_id) FROM blog');
		$sth->execute();
		$result = $sth->fetchColumn();
		
		return $result;			
	}

Dann habe ich noch kurz daraus ein Obj erstellt:

PHP:
$getting_number_blog = new blog($dbh);
$number_blog_entry = $getting_number_blog->getNumber();

Und dann habe ich den rest in eine for Schleife gepackt, um si alle zu bekommen:

PHP:
	for($i = 0; $i < $number_blog_entry;$i++)
	{
		$blog_obj = $i;
		$data_blog = $i;
			
		$blog_obj= new blog($dbh);
		$data_blog = $blog_obj->getAll();
		
		echo '<pre>';
		var_dump($data_blog);	
	}

So jetzt bekomme ich, so oft wie ich Einträge habe in der DB, eine Anzeige, aber leider immer nur noch den ersten und ich weiß nicht warum.
Und außerdem, sieht das ganze jetzt auch nicht so toll aus, und meiner Meinung nach, muss es doch da sicherlich eine bessere Lösung geben, oder?

Danke
 
Hallo,

dein hier dargestelltes Vorgehen in der Anwendung von OOP ist noch etwas unglücklich. Lass dich davon jedoch nicht beirren. Aller Anfang ist schwer ;-).

Um dir ein wenig auf die Sprünge zu helfen - du möchtest ALLE Blogposts auslesen und ausgeben. PDO ist eine feine Bibliothek, die es dir auf verschiedenste Art und Weise ermöglicht, zu diesem Ergebnis zu kommen. Hier mal 2 Anregungen:

Variante 1 - PDO::Stmt::FetchAll
PHP:
$stmt = $this->dwh->prepare ("
    SELECT  blog_id, 
            blog, 
            blog_title, 
            blog_author,
            blog_date, 
            blog_published 
    FROM    blog
");
$stmt->execute ();
$blogPosts = $stmt->fetchAll (PDO::FETCH_OBJ);

var_dump ($blogPosts);

Variante 2 - PDO::Stmt::Fetch
PHP:
$stmt = $this->dwh->prepare ("
    SELECT  blog_id, 
            blog, 
            blog_title, 
            blog_author,
            blog_date, 
            blog_published 
    FROM    blog
");
$stmt->execute ();

$blogPosts = array ();
while ($row = $stmt->fetch (PDO::FETCH_OBJ))
{
   $blogPosts [] = $row;
}

var_dump ($blogPosts);

Wie du siehst, sind beide Möglichkeiten sehr einfach zu verwenden. Dafür benötigst du genau eine einzige Methode in deiner Klasse ;-).

Fetchen kannst du das Array $blogPosts mittels foreach:
PHP:
foreach ($blogPosts as $post_x)
{
   var_dump ($post_x);
}

Grüße BN
 
Zuletzt bearbeitet:
Danke für die Ermutigung.
Habe während deiner Antwort, schon im Internet eine gute Erklärung gefunden, und mache es jetzt so:

PHP:
	public function getAll()
	{
		$sth = $this->dbh->prepare('SELECT blog_id, blog, blog_title, blog_author, blog_date, blog_published FROM blog');
		$sth->execute();
		$result = $sth->fetchAll(PDO::FETCH_OBJ);
		
		return $result;			
	}

naja und die Ausgabe mit foreach.
Trotzdem danke, habe dann doch deinen Weg benutzt.

Lieben Gruß schönes Wochenende.
 

Neue Beiträge

Zurück