Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa obsługi baz SQL, nie działa wyświetlanie 'wielu rekordów'
tiraeth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
  1. <?
  2. class sqlDb
  3. {
  4. var $dbhost;
  5. var $dbuser;
  6. var $dbpass;
  7. var $dbname;
  8. var $dbconnect;
  9. var $dbresult;
  10. var $dbrow = array();
  11. var $dbrowset = array();
  12.  
  13. ...................CIACH
  14.  
  15. //
  16. // Zapytanie do bazy danych
  17. //
  18. function sendquery($query)
  19. {
  20. //
  21. // Usuwamy poprzednie istniejące zapytania
  22. //
  23. unset($this->dbresult);
  24.  
  25. $this->dbresult = mysql_query($query, $this->dbconnect);
  26.  
  27. if($this->dbresult)
  28. {
  29. unset($this->dbrow[$this->dbresult]);
  30. unset($this->dbrowset[$this->dbresult]);
  31.  
  32. return $this->dbresult;
  33. }
  34. else
  35. {
  36. return false;
  37. }
  38. }
  39.  
  40. ...................CIACH
  41.  
  42. //
  43. // Pobieramy wiersz z zapytania
  44. //
  45. function fetchrow($query_id = 0)
  46. {
  47. if(!$query_id)
  48. {
  49. $query_id = $this->dbresult;
  50. }
  51.  
  52. if($query_id)
  53. {
  54. $this->dbrow[$query_id] = mysql_fetch_array($query_id, MYSQL_ASSOC);
  55. return $this->row[$query_id];
  56. }
  57. else
  58. {
  59. return false;
  60. }
  61. }
  62.  
  63. //
  64. // Pobieramy wszystkie wiersze z zapytania
  65. //
  66. function fetchrowset($query_id = 0)
  67. {
  68. if(!$query_id)
  69. {
  70. $query_id = $this->dbresult;
  71. }
  72.  
  73. if($query_id)
  74. {
  75. unset($this->dbrowset[$query_id]);
  76. unset($this->dbrow[$query_id]);
  77.  
  78. while($this->dbrowset[$query_id] = mysql_fetch_array($query_id, MYSQL_ASSOC))
  79. {
  80. $result[] = $this->dbrowset[$query_id];
  81. }
  82.  
  83. return $result;
  84. }
  85. else
  86. {
  87. return false;
  88. }
  89. }
  90. }
  91. ?>


postresql.php - klasa dla bazy postresql
  1. <?
  2. class sqlDb
  3. {
  4. var $dbconnect;
  5. var $dbresult;
  6. var $dbrow = array();
  7. var $dbrowset = array();
  8. var $dbrownum = array();
  9. var $dbnumqueries = 0;
  10.  
  11. ...................CIACH
  12.  
  13. //
  14. // Zapytanie do bazy danych
  15. //
  16. function sendquery($query)
  17. {
  18. //
  19. // Usuwamy poprzednie istniejące zapytania
  20. //
  21. unset($this->dbresult);
  22.  
  23. $this->dbnumqueries++;
  24. $query = preg_replace(&#092;"/LIMIT ([0-9]+), ([0-9]+)/\", \"LIMIT 2 OFFSET 1\", $query);
  25.  
  26. $this->dbresult = @pg_exec($this->dbconnect, $query)
  27.  
  28. if($this->dbresult)
  29. {
  30. $this->dblastquerytext[$this->dbresult] = $query;
  31. $this->dbrownum[$this->dbresult] = 0;
  32.  
  33. unset($this->dbrow[$this->dbresult]);
  34. unset($this->dbrowset[$this->dbresult]);
  35.  
  36. return $this->dbresult;
  37. }
  38. else
  39. {
  40. return false
  41. }
  42. }
  43.  
  44. ...................CIACH
  45.  
  46. //
  47. // Pobieramy wiersz z zapytania
  48. //
  49. function fetchrow($query_id = 0)
  50. {
  51. if(!$query_id)
  52. {
  53. $query_id = $this->dbresult;
  54. }
  55.  
  56. if($query_id)
  57. {
  58. $this->dbrow = @pg_fetch_array($query_id, $this->dbrownum[$query_id]);
  59. if($this->dbrow)
  60. {
  61. $this->rownum[$query_id]++;
  62.  
  63. return $this->dbrow;
  64. }
  65. }
  66. else
  67. {
  68. return false;
  69. }
  70. }
  71.  
  72. //
  73. // Pobieramy wszystkie wiersze z zapytania
  74. //
  75. function fetchrowset($query_id = 0)
  76. {
  77. if(!$query_id)
  78. {
  79. $query_id = $this->dbresult;
  80. }
  81.  
  82. if($query_id)
  83. {
  84. unset($this->dbrowset[$query_id]);
  85. unset($this->dbrow[$query_id]);
  86. $this->rownum[$query_id] = 0;
  87.  
  88. while($this->dbrowset = @pg_fetch_array($query_id, $this->dbrownum[$query_id], PGSQL_ASSOC))
  89. {
  90. $result[] = $this->dbrowset;
  91. $this->dbrownum[$query_id]++;
  92. }
  93.  
  94. return $result;
  95. }
  96. else
  97. {
  98. return false;
  99. }
  100. }
  101. }
  102. ?>


db.php - odpowiada za wybór bazy i połączenie
  1. <?
  2. switch($dbtype)
  3. {
  4. case 'mysql':
  5. include($root_path . 'mysql.php');
  6. break;
  7.  
  8. case 'postgresql':
  9. include($root_path . 'postgresql.php');
  10. break;
  11. }
  12.  
  13. // Tworzymy połączenie z bazą danych
  14. $db = new sqlDb();
  15. $db->connect($dbhost, $dbuser, $dbpass, $dbname);
  16. if(!$db->dbconnect)
  17. {
  18. die(&#092;"Error: Could not connect to the database\");
  19. }
  20. ?>


config.php - konfiguracja bazy danych
  1. <?
  2. $dbhost = '';
  3. $dbuser = '';
  4. $dbpass = '';
  5. $dbname = '';
  6.  
  7. $dbtype = 'mysql'; // lub postresql
  8. ?>


show.php - przykladowy plik z wykonaniem klasy
  1. <?
  2. $root_path = '';
  3. include($root_path . &#092;"config.php\");
  4. include($root_path . &#092;"db.php\");
  5.  
  6. // TWORZYMY TABELE - dziala
  7. $sql = &#092;"CREATE TABLE sqls_test (id CHAR(10), tekst CHAR(20))\";
  8.  
  9. $result = $db->sendquery($sql);
  10.  
  11. // WRZUCAMY REKORD - dziala
  12. $sqla = &#092;"INSERT INTO sqls_test(id, tekst) VALUES ('2', 'jeden')\";
  13.  
  14. $resulta = $db->sendquery($sqla);
  15.  
  16. // WRZUCAMY REKORD - dziala
  17. $sqlb = &#092;"INSERT INTO sqls_test(id, tekst) VALUES ('4', 'dwa')\";
  18.  
  19. $resultb = $db->sendquery($sqlb);
  20.  
  21. // ODBIERAMY REKORDY - dziala
  22. $sqlc = &#092;"SELECT * FROM sqls_test ORDER BY id ASC\";
  23.  
  24. $resultc = $db->sendquery($sqlc);
  25.  
  26. // WYSWIETLAMY REKORDY - nie dziala
  27. if($rows = $db->fetchrowset($resultc))
  28. {
  29. $id = $rows['id']; // NIE WIEM CZY TO TAK MA BYC :C
  30. $tekst = $rows['tekst']; // NIE WIEM CZY TO TAK MA BYC :C
  31.  
  32. echo '<b>ID:</b> '.$id.'<br /><b>TEKST:</b> '.$tekst.'<br /><br />';
  33. }
  34.  
  35. // ODLACZAMY SIE OD BAZY - dziala
  36. $db->disconnect;
  37. ?>


Proszę o pomoc jeżeli codzi o wyświetlanie... bo funkcja fetchrow działa... ale fetchrowset nie sad.gif.....

POMOCY

Ten post edytował Tiraeth 9.08.2004, 20:17:29
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:49