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?