PHP5 (OOP) + MySQL - problem z algorytmem


(Dajznac) #1

Mam 2 proste skrypty - klasę do realizowania zapytań MySQL, oraz skrypt php wykorzystujący właśnie tę klasę.

Chcę uzyskać taki efekt, by wykorzystując te dwa skrypty, w odpowiedzi na zapytanie SQL, otrzymać tablicę z całą zawartością tabeli.

Wg mnie wszystko wygląda ok, ale obecnie, w odpowiedzi na zapytanie otrzymuję tylko ostatni wiersz tabeli.

index.php

<?php


	require('database.class.php');


	$database = new database('localhost','root','root','database');

	$database->select('SELECT * FROM users');


	foreach ($database->sqlQueryResult as $variable)

	{

		echo $variable.'
';

	}


?>

database.class.php

<?php


class database

{


	# polaczenie z baza danych

	function __construct($dbHost,$dbUser,$dbPassword,$dbName)

	{

		$dbConnection = @mysql_connect($dbHost,$dbUser,$dbPassword) or die (mysql_error());

		@mysql_select_db($dbName) or die (mysql_error());

	}




	function select($sqlQuery)

	{

		$this->query = $sqlQuery;

		$this->result = mysql_query($this->query);


		$this->sqlQueryResult = mysql_fetch_assoc($this->result);


		return $this->sqlQueryResult;

	}

}

?>

Proszę o pomoc w "naprawieniu" algorytmu. Nie wiem gdzie robie błąd.


(Paramedyk) #2

problem jest tutaj:

$this->sqlQueryResult = mysql_fetch_assoc($this->result);

w sqlQueryResult zapisujesz tylko jedną linijkę.

Jeśli chcesz pobierać (i zwracać) więcej niż jedną, sqlQueryResult musi być wektorem którego wartości zainicjujesz pętlą, ale w ciele klasy.


(Airborn) #3

Tylko pytanie czy warto pisać swoją klasę do obsługi MySQL’a, czy nie lepiej skorzystać z PDO


(Paramedyk) #4

Nie brońmy ludziom się rozwijać. Chce pisać własny interfejs - niech to robi. Zdecydowanie wole takie postawy niż ludzi, którym nawet dokumentacji do gotowych skryptów nie chce się czytać i szukają jeleni aby zrobili za nich.

joe_ny - klasa ogólnie jest poprawna, ale nadaje się tylko do pojedynczych pobrań rekordów. DO pobierania większej ilości danych musisz ją przerobić tak jak Ci powiedziałem. Możesz się wzorować na PDO. Tam jest dokładnie to o czym napisałem.


(Airborn) #5

Oczywiście, że tak. Zwłaszcza w ramach testowania i nauki. Ale chociażby ze względu na wydajność, warto zainteresować się również innymi rozwiązaniami.


(Dajznac) #6

Dziękuję kolegom za zainteresowanie tematem oraz udzieloną pomoc.

Pozdrawiam.