Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sterownik MySql, problem z fetch_array
wojtek
post 14.07.2003, 16:25:25
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: --

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


Witam,

Zachcialo mi sie poglebic moja wiedze (wlasiciwie to praktyke) o programowaniu obiektowym i napisalem wlasny sterownik MySQL. Oczywiscie taki obslugujacy kilka podstawowych funkcji, bez zadnych fajerwerkow ;)

I mam w zasadzie 2 problemy:

Chociaz najpierw moze przedstawie najwazniejsze czesci sterownika:

[php:1:d81a0e5d22]<?php
class db {
var $query_array;
var $query_result;

function db_query_select($what,$table,$where="",$order="",$limit="") {
$this->query_result=@mysql_query("SELECT $what FROM $table $where $order $limit") or die ($this->db_error());
$this->db_query_array();
}

function db_query_array() {
$this->query_array=mysql_fetch_array($this->query_result) or die ($this->db_error());
}

function db_num_fields() {
$a=mysql_num_fields($this->query_result) or die ($this->db_error());
return $a;
}

function db_field_name($field_nr) {
$a=mysql_field_name($this->query_result,$field_nr) or die ($this->db_error());
return $a;
}

?>[/php:1:d81a0e5d22]

To chyba najwazniejsze do opisania mojego problemu. Zaczne od pierwszego, ktory w zasadzie rozwiazalem, ale mam pytanie :)

Robie sobie cos takiego:
[php:1:d81a0e5d22]<?php
$bd=new db;
$bd->db_query_select("*",$bd->jakas_tabela);
$ile=$bd->db_num_fields();
?>[/php:1:d81a0e5d22]

I teraz jesli mialem:

[php:1:d81a0e5d22]<?php
function db_num_fields() {
$a=mysql_num_fields($this->query_result) or die ($this->db_error());
return $a;
}
?>[/php:1:d81a0e5d22]

To $ile zwraca poprawna wartosc, a jesli mam:

[php:1:d81a0e5d22]<?php
function db_num_fields() {
return mysql_num_fields($this->query_result) or die ($this->db_error());
}
?>[/php:1:d81a0e5d22]

To nie zwraca nic.. Teoretycznie przeciez to jest to samo, dlaczego ten 2. przyklad nie dziala?

I drugi problem, potrzebuje zrobic prosta petle while:

[php:1:d81a0e5d22]<?php
while ($tabela=mysql_fetch_array($wynik_zapytania)) {
print "aa";
}
?>[/php:1:d81a0e5d22]

I za pomoca mojego sterownika robie to tak:

[php:1:d81a0e5d22]<?php
while ($tabela=mysql_fetch_array($bd->query_result)) {
print "a";
}
?>[/php:1:d81a0e5d22]

Wczesniej $query_result zawiera wynik zapytania z bazy, gdy zrobie np. mysql_num_rows($bd->query_result) to zwraca mi prawidlowa liczbe. A ta petla nie dziala.. Macie jakies pomysly czemu to nie dziala? Jak to rozwiazac, najlepiej by sterownik w sobie zawieral funkcje mysql_fetch_array() i zeby dalo sie ja wywolywac wlasnie tak w petli..

Ja juz siedze nad tym sterownikiem kilka ladnych godzin i nic mi nie wychodzi.. :/


-------------
UPDATE

Ciagle nad tym siedze i tak:

jak dam:

[php:1:d81a0e5d22]<?php
$a=mysql_query("SELECT * FROM jakas_tabela");
while($dane=mysql_fetch_array($a)) {
print "zz";
}
?>[/php:1:d81a0e5d22]

To dziala. Jesli dam w tym samym miejscu taki kod:

[php:1:d81a0e5d22]<?php
$bd->db_query_select("*",$bd->jakas_tabela);

while ($tabela=mysql_fetch_array($bd->query_result)) {
print "aa";
}
?>[/php:1:d81a0e5d22]

To z kolei zaczelo dzialac (nie wiem czemu ;), ale.. nie do konca. Nie uwzglednia pierwszego rekordu w tabeli. Jesli mam 9 rekordow - wyswietli 8, oprocz 1. Jesli mam 2 - wyswietli 1. Jesli mam 1 rekord - nie ma nic..
Co ja robie zle?
Go to the top of the page
+Quote Post
zalew
post 15.07.2003, 02:56:38
Post #2





Grupa: Zarejestrowani
Postów: 407
Pomógł: 0
Dołączył: 24.10.2002
Skąd: warszawa

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


Cytat
Nie uwzglednia pierwszego rekordu w tabeli. Jesli mam 9 rekordow - wyswietli 8, oprocz 1. Jesli mam 2 - wyswietli 1. Jesli mam 1 rekord - nie ma nic..

moze gdzies w swoich funkcjach nie uwzgledniles ze pierwszy rekord ma id 0 ?


--------------------
Go to the top of the page
+Quote Post
kurtz
post 15.07.2003, 08:47:57
Post #3





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

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


Hej
Cytat
[php:1:5c1654b486]..

function db_query_select($what,$table,$where="",$order="",$limit="") {
$this->query_result=@mysql_query("SELECT $what FROM $table $where $order $limit") or die ($this->db_error());
$this->db_query_array();
}

function db_query_array() {
$this->query_array=mysql_fetch_array($this->query_result) or die ($this->db_error());
}
...
?>[/php:1:5c1654b486]
...

jak dam:

[php:1:5c1654b486]<?php
$a=mysql_query("SELECT * FROM jakas_tabela");
while($dane=mysql_fetch_array($a)) {
print "zz";
}
?>[/php:1:5c1654b486]

To dziala. Jesli dam w tym samym miejscu taki kod:

[php:1:5c1654b486]<?php
$bd->db_query_select("*",$bd->jakas_tabela);

while ($tabela=mysql_fetch_array($bd->query_result)) {
print "aa";
}
?>[/php:1:5c1654b486]

To z kolei zaczelo dzialac (nie wiem czemu ;), ale.. nie do konca. Nie uwzglednia pierwszego rekordu w tabeli. Jesli mam 9 rekordow - wyswietli 8, oprocz 1. Jesli mam 2 - wyswietli 1. Jesli mam 1 rekord - nie ma nic..
Co ja robie zle?
Na koncu db_query_select masz wywolanie $this->db_query_array(); - to ona opuszca jeden wiersz.


Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
wojtek
post 15.07.2003, 09:19:54
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: --

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


Cytat
Na koncu db_query_select masz wywolanie $this->db_query_array(); - to ona opuszca jeden wiersz.


Wlasnie wczoraj pozno w nocy do tego doszlem winksmiley.jpg Eh, taka niby blahostka, a ja tyle czasu tego szukalem :? Ogolnie troszke jeszcze poprawilem moj sterownik, bo tamten byl duzo niedoskonaly :oops: Ale bardzo dziekuje za odpowiedz i za czas poswiecony na analize tego mojego kodu.
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:53