Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako radi mysql_connect?

[es] :: PHP :: Kako radi mysql_connect?

[ Pregleda: 1441 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Kako radi mysql_connect?25.02.2010. u 17:09 - pre 172 meseci
Imam malu klasu za povezivanje na mysql bazu i vise drugih klasa koje
extenduju pomenutu...

Code:

class MySQLDB {
    
    private $connection;
    
    function __construct() {
        $this->dbConnect();
    }
    
    private function dbConnect() {
        $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
        mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
    }
    
    private function dbClose() {
        mysql_close($this->connection);
    }
   
    protected function query($query) {
        //$this->dbConnect();
        return mysql_query($query, $this->connection);
        //$this->dbClose();
    }
};
$db = new MySQLDB;



class Getaccs extends MySQLDB {
    
    function __construct() {
        
    }
    
    function getAccs() {
        $q = "SELECT id FROM tbl";
        $result = $this->query($q);
        
        //ostatak koda ovde
    }
};
$getaccs = new Getaccs;


Ovo je uproscena varijanta ali ce posluziti za konkretno pitanje.
Problem je u link identifier-u "$this->connection". Naime, kada god
izvrsim upit ka bazi na pomenuti nacin, dobijam error:
"supplied argument is not a valid MySQL-Link resource".

Ako u f-ju query() ukljucim i komentovane linije onda je sve u redu...
Zanima me gde je nestao link identifier ako je konekcije vec uspostavljena
i ako je $this->connection setovan? Mislio sam da ce ostati setovan sve dok
se ne izvrse sve skripte koje extenduju MySQLDB... U suprotnom bi znacilo da
moram za svaku skriptu da otvaram konekciju ponovo...
Znam da ce se vratiti ista konekcija ako su vrednosti DB_SERVER, DB_USER i DB_PASS
iste pa sam bio ubedjen da je to jedna konekcija i ostaje otvorena dok je ja
ne zatvorim sa $this->dbClose()...

Sve u svemu jel ima logike da u f-ji query() uvek otvaram i zatvaram conn?
Takodje hocu da ubacim i neku proveru za podatke koji ce biti upisani/selektovani
u/iz baze...

Code:
protected function safe($item) {
    //$this->dbConnect();
    $item = mysql_real_escape_string($item, $this->connection);
    //$this->dbClose();
    return $item;
}


Onda bi i ovde morao da otvaram i zatvaram conn svaki put kada proveravam...
Jel to mnogo opterecuje server?

A opet mogu i da jednostavno obrisem $this->connection kao argument pa ce sve raditi.
Jel ima neke razlike u tom slucaju? Ocu da skapiram ovo kako bih bio siguran da skripta
efikasno radi ono sto treba da radi :)

Pozz
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-3.sezampro.yu.



+33 Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 18:24 - pre 172 meseci
Problem je što si u toj Getaccs klasi redefinisao konstruktor, a najpre ne znam zašto si to uradio kad nisi uneo nikakvu custom logiku u njega.

1. rešenje:
Code:
function __construct() {
    parent::__construct();
}

... što nema nikakvog smisla.

2. rešenje, odnosno, ono što bi trebao da uradiš jeste da jednostavno obrišeš tu definiciju konstruktora iz Getaccs klase.
 
Odgovor na temu

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 19:43 - pre 172 meseci
I ako obrisem __construct() iz Getaccs opet se izgubio link identifier...

Jel ima neke razlike izmedju pozivanja konstruktora parent klase
i pozivanja f-je dbConnect() pre izvrsenja svakog upita?
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 20:13 - pre 172 meseci
Mala digresija: šta predstavljaju klase MySQLDB i Getaccs? Kontam da je MySQLDB tvoj mysql adapter, ali ova druga?
 
Odgovor na temu

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 20:51 - pre 172 meseci
U drugoj klasi kreiram query i vracam rezultat za stampu.
Ima vise tih "child" klasa u zavisnosti koja se strana ucitava.
Npr ako ucitavam index.php inkludovacu getcontent.php
i getmenu.php. Ovo su samo primeri...

Dakle te "child" klase pozivaju top klasu MySQLDB kada se
izvrsava upit. Znazi formiram $query i pozovem
$result = $this->query($q); (query() f-ja iz MySQLDB).
Hocu da razdvojim kod na delove da ne bih imao jednu
veliku klasu, cisto zbog preglednosti, nekako mi to logicnije...

I sve to lepo radi kada izbrisem argument "$this->connection"
iz query() f-je, znaci da je konekcija aktivna, samo me zanima
zasto ne mogu da je "dohvatim", gde se izgubila :)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+711 Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 21:06 - pre 172 meseci
Pitao sam šta predstavlja ta klasa, a ne kako radi (to vidim iz koda). Kapiram da tih n klasa zapravo predstavljaju biznis modele, i u tom slučaju ta bi se klasa zvala Account i imala metode tipa get_by_id(), get_all(), save() itd, i ne bi trebalo da nasleđuje adapter, već da ga agregira. Mislim, pošto vidim da se trudiš da radiš OO, trebalo bi da ga radiš kako treba...

Ok, nebitno, da ponovim ovo što je Nikola rekao, dakle izbacio si potpuno konstruktor iz nasleđene klase i i dalje ne vidi konekciju?

BTW, tvoj se kod svodi na ovo:
Code (php):

<?php
class A
{
  private $a;

  function __construct() {
    $this->a = 'test';
  }

  protected function fgh() {
    echo "$this->a\n";
  }
}

class B extends A
{
  public function asd() {
    $this->fgh();
  }
}

$b = new B();
$b->asd();
?>
 

Kod mene ovo radi kako treba.

[Ovu poruku je menjao jablan dana 25.02.2010. u 22:26 GMT+1]
 
Odgovor na temu

sekvoja

Član broj: 91239
Poruke: 269
*.ptt.rs.



Profil

icon Re: Kako radi mysql_connect?25.02.2010. u 23:23 - pre 172 meseci
Citat:
jablan:dakle izbacio si potpuno konstruktor iz nasleđene klase i i dalje ne vidi konekciju?


Upravo tako...

He he, tada nisam probao da u konstruktoru getaccs klase dodam parent::__construct();
Onda radi :)

Ali po vama bi trebalo da radi i ako constructor potpuno izbrisem...
Ako ima voljnih da pomazu evo attachujem mini cms za testiranje.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: PHP :: Kako radi mysql_connect?

[ Pregleda: 1441 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.