Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Zapytanie do bazy (fetch_assoc)
Victor152
post
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


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ł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rybik
post
Post #2





Grupa: Zarejestrowani
Postów: 99
Pomógł: 15
Dołączył: 29.07.2006

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


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++) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ). No i raczej for dla tablicy asocjacyjnej to kiepski pomysl (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował rybik 31.07.2008, 13:37:04
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 10:32