Witam.... Jestem totalny newbie jeżeli chodzi o klasy ale postanowiłem napisać klasę do obsługi dwóch baz danych: mySQL oraz postreSQL. Niestety nie działa mi jedna rzecz... mianowicie wyświetlanie wielu rekordów przy użyciu pętli while... zarówno jeżeli chodzi o mySQL jak i postreSQL. Odpowiada za to funkcja
fetchrowset. Pisząc moją klasę opierałem się na phpBB2, z którego wyciągałem tylko kod dotyczący wyświetlania wyników zapytania (SELECT).
Poniżej przedstawiam kody źródłowe plików, które odpowiadają za klasę. Nie chcąc zasypywać forum wrzucam tylko funkcje odpowiadające na wyświetlanie danych:
mysql.php - klasa dla bazy mysql<?
class sqlDb
{
var $dbhost;
var $dbuser;
var $dbpass;
var $dbname;
var $dbconnect;
var $dbresult;
...................CIACH
//
// Zapytanie do bazy danych
//
function sendquery($query)
{
//
// Usuwamy poprzednie istniejące zapytania
//
$this->dbresult = mysql_query($query, $this->dbconnect);
if($this->dbresult)
{
unset($this->dbrow[$this->dbresult]); unset($this->dbrowset[$this->dbresult]);
return $this->dbresult;
}
else
{
return false;
}
}
...................CIACH
//
// Pobieramy wiersz z zapytania
//
function fetchrow($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->dbresult;
}
if($query_id)
{
return $this->row[$query_id];
}
else
{
return false;
}
}
//
// Pobieramy wszystkie wiersze z zapytania
//
function fetchrowset($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->dbresult;
}
if($query_id)
{
unset($this->dbrowset[$query_id]); unset($this->dbrow[$query_id]);
{
$result[] = $this->dbrowset[$query_id];
}
return $result;
}
else
{
return false;
}
}
}
?>
postresql.php - klasa dla bazy postresql<?
class sqlDb
{
var $dbconnect;
var $dbresult;
var $dbnumqueries = 0;
...................CIACH
//
// Zapytanie do bazy danych
//
function sendquery($query)
{
//
// Usuwamy poprzednie istniejące zapytania
//
$this->dbnumqueries++;
$query = preg_replace(\"/LIMIT ([0-9]+), ([0-9]+)/\", \"LIMIT 2 OFFSET 1\", $query);
$this->dbresult = @pg_exec($this->dbconnect, $query)
if($this->dbresult)
{
$this->dblastquerytext[$this->dbresult] = $query;
$this->dbrownum[$this->dbresult] = 0;
unset($this->dbrow[$this->dbresult]); unset($this->dbrowset[$this->dbresult]);
return $this->dbresult;
}
else
{
return false
}
}
...................CIACH
//
// Pobieramy wiersz z zapytania
//
function fetchrow($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->dbresult;
}
if($query_id)
{
$this->dbrow = @pg_fetch_array($query_id, $this->dbrownum[$query_id]); if($this->dbrow)
{
$this->rownum[$query_id]++;
return $this->dbrow;
}
}
else
{
return false;
}
}
//
// Pobieramy wszystkie wiersze z zapytania
//
function fetchrowset($query_id = 0)
{
if(!$query_id)
{
$query_id = $this->dbresult;
}
if($query_id)
{
unset($this->dbrowset[$query_id]); unset($this->dbrow[$query_id]); $this->rownum[$query_id] = 0;
while($this->dbrowset = @pg_fetch_array($query_id, $this->dbrownum[$query_id], PGSQL_ASSOC
)) {
$result[] = $this->dbrowset;
$this->dbrownum[$query_id]++;
}
return $result;
}
else
{
return false;
}
}
}
?>
db.php - odpowiada za wybór bazy i połączenie<?
switch($dbtype)
{
case 'mysql':
include($root_path . 'mysql.php');
break;
case 'postgresql':
include($root_path . 'postgresql.php');
break;
}
// Tworzymy połączenie z bazą danych
$db = new sqlDb();
$db->connect($dbhost, $dbuser, $dbpass, $dbname);
if(!$db->dbconnect)
{
die(\"Error: Could not connect to the database\"); }
?>
config.php - konfiguracja bazy danych<?
$dbhost = '';
$dbuser = '';
$dbpass = '';
$dbname = '';
$dbtype = 'mysql'; // lub postresql
?>
show.php - przykladowy plik z wykonaniem klasy<?
$root_path = '';
include($root_path . \"config.php\");
include($root_path . \"db.php\");
// TWORZYMY TABELE - dziala
$sql = \"CREATE TABLE sqls_test (id CHAR(10), tekst CHAR(20))\";
$result = $db->sendquery($sql);
// WRZUCAMY REKORD - dziala
$sqla = \"INSERT INTO sqls_test(id, tekst) VALUES ('2', 'jeden')\";
$resulta = $db->sendquery($sqla);
// WRZUCAMY REKORD - dziala
$sqlb = \"INSERT INTO sqls_test(id, tekst) VALUES ('4', 'dwa')\";
$resultb = $db->sendquery($sqlb);
// ODBIERAMY REKORDY - dziala
$sqlc = \"SELECT * FROM sqls_test ORDER BY id ASC\";
$resultc = $db->sendquery($sqlc);
// WYSWIETLAMY REKORDY - nie dziala
if($rows = $db->fetchrowset($resultc))
{
$id = $rows['id']; // NIE WIEM CZY TO TAK MA BYC :C
$tekst = $rows['tekst']; // NIE WIEM CZY TO TAK MA BYC :C
echo '<b>ID:</b> '.$id.'<br /><b>TEKST:</b> '.$tekst.'<br /><br />'; }
// ODLACZAMY SIE OD BAZY - dziala
$db->disconnect;
?>
Proszę o pomoc jeżeli codzi o wyświetlanie... bo funkcja
fetchrow działa... ale
fetchrowset nie

.....
POMOCY
Ten post edytował Tiraeth 9.08.2004, 20:17:29