Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Zapytanie do bazy (fetch_assoc)
Forum PHP.pl > Forum > Przedszkole
Victor152
Witam, zawsze gdy zwracam mysql_fetch_assoc z funkcji i przepuszczam go przez pętlę while otrzymuje nieskończoność razy wypis pierwszego rekordu.
  1. <?php
  2. $get_arr_of = new get_arr_of;
  3. $get_arr_of_cat = $get_arr_of->cat("SELECT * FROM download_cat WHERE id='".ID."' limit 0, ".$get_no_of_file."");
  4. while ($row = $get_arr_of_cat) {
  5. $desc_before = $row['desc'];
  6. if(strlen($desc_before) > 40) {
  7. $desc_before = substr($desc_before, 0, 40);
  8. $desc = $desc_before.'...';
  9. }
  10. else {
  11. $desc = $desc_before;
  12. }
  13. echo $row['name']."<br> ".$desc."<br>";
  14. }
  15. ?>

  1. <?php
  2. class get_arr_of {
  3.  
  4. public function __construct($host = 'localhost', $user = 'root', $pass = '', $db = 'download') {
  5. $this->host = $host;
  6. $this->user = $user;
  7. $this->pass = $pass;
  8. $this->db = $db;
  9. }
  10.  
  11. function cat($query) {
  12. $connection = mysql_connect($this->host, $this->user, $this->pass);
  13. mysql_select_db($this->db, $connection);
  14. $do = mysql_query($query, $connection);
  15. mysql_close($connection);
  16. return mysql_fetch_assoc($do);
  17. }
  18. }
  19. ?>


Macie jakieś pomysły jak to rozwiązac?
Można puścic pętle for, ale to chyba zły i obciążający pomysł?
rybik
mysql_fetch_assoc, zwraca tablice asocjacyjną rekordu wyniku i przesuwa index o 1, zatem poprawnie będzie

  1. <?php
  2. function my_fetch_table() {
  3. $result = array();
  4. $query = "SELECT id, a, b, c, d FROM tabela";
  5. $data = mysql_query($query);
  6. if ($data && mysql_num_rows($data)) {
  7. while ($record = mysql_fetch_assoc($data)) {
  8. $result=[$record['id']]=array($record['a'],$record['b'],$record['c'],$record['d']);
  9. // wersja prosta bez id
  10. // $result[]=$record;
  11. } // while
  12. } // if
  13. return $result;
  14. } // function
  15. ?>


zwraca tabelę
id1 => (a1,b1,c1,d1)
id2 => (a2,b2,c2,d2)
id5 => (a5,b5,c5,d5)

wersja bez id zwraca tabelę

[0] => (id1,a1,b1,c1,d1)
[1] => (id2,a2,b2,c2,d2)
[2] => (id5,a5,b5,c5,d5)

OT: Pętla for jest dobrym rozwiązaniem, gdy chcesz modyfikować każdy rekord, ponieważ foreach pracuje na kopii. For nie jest obciążające, chyba, że wpadniesz na pomysł liczenia wielkosci tabeli w kazdej iteracji (slynne for($i=0;$i<count($tabela);$i++) smile.gif ). No i raczej for dla tablicy asocjacyjnej to kiepski pomysl smile.gif
Victor152
Nie chodziło do końca o to, ponieważ mam funkcje w klasie, i nie chce jej tutaj wlepiać.
Pewnie będę musiał zrobić pętle for...


Ma ktoś inne rozwiązanie, bez przesuwania funkcji?
rybik
mowie Ci po prostu, że mysq_fetch_assoc zwróci tylko 1 rekord jeżeli nie jest użyte w pętli, więc poszerz sobie funckję get_arr_fo->cat() tak, żeby nie zwracała 1 rekordu tylko tablicę
Victor152
Czyli?
zapisywac wczesniej mysql_fetch_array w zmienna i dopiero zwrócic?
rybik
mysql_fetch_array tak naprawde robi "mysql fetch next row of array" smile.gif

masz w ręku funkcję, która bierze rekord i przesuwa indeks tablicy-zasobu oraz zasoby, teraz możesz to przepuścić przez while i przepisac do tablicy lub tablicy asocjacyjnej tak jak opisałem wcześniej a gdzie to umieścisz w kodzie to juz wedle uznania
Victor152
Przykładem nie pogardzę...
  1. <?php
  2. // ...
  3. function () {
  4. $haha.gif = mysql_query('SELECT id, user, pass, gg...... FROM ...');
  5. while ($row = mysql_fetch_assoc($haha.gif)) {
  6. //co tutaj?
  7. $tablica[$row] = $row;
  8. }
  9. return $row;
  10. }
  11. ?>

Prosiłbym o przykład, bo nie wiem jak to zwrócić poprawnie. :/
Victor152
Nie pomogło mi to zbytnio.
phpion
  1. <?php
  2. $tablica[] = $row;
  3. ?>

i
  1. <?php
  2. return $tablica;
  3. ?>
Victor152
A w kodzie normalnie while?
#Edit:
To samo, nie pomogło, moze pokażcie swoje funkcje, któe zwracają fetch_assoc?!
#Edit2:
czy ktoś pomożę?
golaod
Nie rozumiem w czym masz problem ? Kod:
  1. <?php
  2. $tablica = array();
  3. $zap = mysql_query('zapytanie');
  4. while($wiersz = mysql_fetch_assoc($zap))
  5. $tablica[] = $wiersz;
  6. return $tablica;
  7. ?>

Nie zwraca Ci tablicy ze wszystkimi wynikami ? Jakaś magia.
Victor152
Zaużmy, że zwraca, jak to potem przetworzyć?
rzymek01
normalnie, tak samo w pętli:
  1. <?php
  2. for ($i = 0, $count = count($tablica); $i < $count; ++$i)
  3. {
  4. echo $tablica[$i];
  5. }
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.