Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sterownik MySql, problem z fetch_array
Forum PHP.pl > Forum > PHP
wojtek
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?
zalew
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 ?
kurtz
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
wojtek
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.
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.