Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwie bazy MySql i zapytania
Forum PHP.pl > Forum > Przedszkole
WMP
Witam, chiałbym żeby zapytanie db było wysyłane do wóch baz($db i $db2)
oto przyładowe zapytanie
  1. <?php
  2. $db -> Execute("UPDATE players SET credits=credits-".$cost." WHERE id=".$player -> id);
  3. ?>


Oczywiście nie chodiz mi o to żeby kopiowac je dógi raz tylko że z $db2 tylko zeby zorbić jakoś aby w jednej lini wysyłało to zapytanie do obu baz
ennics
zdefiniuj klase osłonową.
  1. <?php
  2.  
  3. class foo {
  4.   private $db1;
  5.   private $db2;
  6.  
  7.   public function __construct() {
  8.     if(!$this->db1) {
  9.       $this->db1 = new DB_MySQL();
  10.     }
  11.     if(!$this->db1) {
  12.       $this->db2 = new DB_PGSQL();
  13.     }
  14.   }
  15.  
  16.   public function run($query) {
  17.     $this->db1->execute($query);
  18.     $this->db2->execute($query);
  19.   }
  20. }
  21. $db = new foo();
  22. $db->run($query);
  23.  
  24. ?>
WMP
Czyli co z tym zorbić? bo nigdy nie maiłęm klasy w ręku. Mam jeszcze pytanko jedno, czy dało by się zrobić tak ze dane tabele wędrują tylko do $db2 i $db3 a inne do $db i $db3 questionmark.gif
ennics
Cytat
li co z tym zorbić? bo nigdy nie maiłęm klasy w ręku

ale korzystasz z klas... zapewne z jakiejś biblioteki??
  1. <?php
  2. $db -> Execute("...");
  3. ?>

to nic innego jak odwołanie się do obiektu klasy która zawiera w sobie metodę Execute. Skoro używasz metody tej klasy to musiałeś wcześniej utworzyć jej instancję. np tak.
  1. <?php
  2.  
  3. //...
  4. $db1 = new Biblioteka_do_bazy_danych1();
  5. $db2 = new Biblioteka_do_bazy_danych2();
  6. $db3 = new Biblioteka_do_bazy_danych3();
  7. //...
  8.  
  9. ?>


znajdź to miejsce w którym tworzysz obiekty klas i "wrzuć" je do klasy osłonowej:
  1. <?php
  2.  
  3. //...
  4. public function __construct() {
  5. if(!$this->db1) {
  6. $this->db1 = new Biblioteka_do_bazy_danych1();
  7. }
  8. if(!$this->db2) {
  9. $this->db2 = new Biblioteka_do_bazy_danych2();
  10. }
  11. if(!$this->db3) {
  12. $this->db3 = new Biblioteka_do_bazy_danych3();
  13. }
  14. }
  15.  
  16. public function run($query) {
  17. $this->db1->execute($query);
  18. $this->db2->execute($query);
  19. $this->db3->execute($query);
  20. }
  21. //...
  22.  
  23. ?>

Cytat
dane tabele wędrują tylko do $db2 i $db3 a inne do $db i $db3

sprecyzuj, jakie tabele masz na myśli?
WMP
alchemy_mill
bad_words
bows
bridge
bugtrack
categories
core
core_market
cores
court
court_cases
czary
equipment
events
farm
farms
farmy_palyer
halloffame
herbs
hmarket
houses
kopalnie
kowal
kowal_praca
lib_comments
library
mage_items
mail
miasto
mill
mill_work
monsters
news
news_comments
newspaper
newspaper_comments
notatnik
outpost_monsters
outpost_veterans
outposts
pmarket
potions
praca
questaction
quests
replies
reset
sklepy
sklepy1
topics
tribe_mag
tribe_oczek
tribe_perm
tribe_rank
tribe_replies
tribe_topics
tribe_zbroj
tribes
upd_comments
updates
warehouse

te ^^ tabele są w bazie $db2

w $db są to:
adodb_logsql
aktywacja
ban
chat
chat_config
jail
log
players
polls
sessions
settings


a $db3 to jest poproztu kopia danych z tych obu baz, tylko że tworzona na bierząco przy zapytaniach
ennics
nooo stary to już jest prawie praca oferowana biggrin.gif nie bardzo rozumiem na czym polega działanie Twojego skryptu. Zaprojektowanie klasy do obsługi trzech uchwytów do bazy (trzech instancji klas) wymaga trochę czasu i wysiłku.
Zamiast na tabelach może skoncentruj się na samych zapytaniach, bo przecież nie używasz tych samych zapytań do zapisu/odczytu ze wszystkich baz.
Mogę Cię naprowadzić ale nic więcej winksmiley.jpg
  1. <?php
  2.  
  3. class query_factory {
  4.   private $db1;
  5.   private $db2;
  6.   private $db3;
  7.  
  8.   public function __construct() {
  9.     if(!$this->db1) {
  10.       $this->db1 = new Biblioteka_do_bazy_danych1();
  11.     }
  12.     if(!$this->db2) {
  13.       $this->db2 = new Biblioteka_do_bazy_danych2();
  14.     }
  15.     if(!$this->db3) {
  16.       $this->db3 = new Biblioteka_do_bazy_danych3();
  17.     }
  18.   }
  19.   private function query_f1() {
  20.     $data= $this->db1->execute("SELECT alchemy_mill, bad_words, bows, bridge, bugtrack ... updates,
  21. warehouse FROM tabela1 WHERE ...");
  22.     $res = $data->fetch_assoc();
  23.     return $res;
  24.   }
  25.   private function query_f2() {
  26.      $data= $this->db2->execute("SELECT aadodb_logsql, aktywacja, ban, chat,  FROM tabela2 WHERE ...");
  27.      $res = $data->fetch_assoc();
  28.      return $res;
  29.   }
  30.   public function run() {
  31.     $data_form_db1 = $this->query_f1();
  32.     $data_form_db2 = $this->query_f2();
  33.     $synergy[1] = $data_form_db1;
  34.     $synergy[2] = $data_form_db2;
  35.     $return $synergy;
  36.   }
  37. }
  38. $db = new query_factory();
  39. $wszystko = $db->run($query); 
  40. // matoda foo::run zwraca dane z obu tabel umieszczone w tablicy $synergy
  41.  
  42. ?>

psiałem z palca, może coś nie grać winksmiley.jpg
PS. jeśli nie miałeś wcześniej do czynienia z klasami możesz poszukać prostszych (proceduralnych) rozwiązań, albo (i to jest lepsze wyjście) zacznij poznawać OOP http://pl2.php.net/manual/pl/language.oop.php
WMP
i teraz jak zorbie zapytanie $wszytko -> execute ... to mi już wybierze do której bazy itp?

I oczywiście musze tą klase dodać takim czymś:
  1. <?php
  2.  
  3. require_once("class/mysql_class.php");
  4.  
  5. ?>
ennics
nie... klasa query_factory którą wyżej napisałem jest praktycznie bezużyteczna. To jest tylko przykład, zarys, jak może wyglądać Twoja klasa która będzie implementowała metody obsługujące klasę bazy danych.
Koniecznie poczytaj manual o programowaniu obiektowym. To jest podstawa. Bez tego nie ruszysz. Czytaj i stosuj w praktyce. Musisz zrozumieć mechanizm funkcjonowania obiektów, potem będzie z górki. Poczytaj potem o wzorcach projektowych, ta klasa powyżej stosuje wzorzec Factory...
Przed Tobą długa droga. Ale będziesz miał satysfakcję jak "łykniesz" ten temat.
WMP
ennics, zrezygnowałem z tego pomysłu. Wielkie dizęi za to że straciłeś tyle czasy aby mi to wytłumaczyć, ale i tak nie załapałem, cuż narazie potrafie php w podstawach. Z manuali niegdy sie nie naucze bo nie potrafie. CO gorsza nei czytałęm nic o php tylko opierałem sie na przykładach iuczyłem w praktyce bo nic nie rozumiałem z "php Kompedium(Helion)"taki już muj los. Do zobaczenia(pewnie za sekunde walne następny temat, ale tacy ludize jak ja napędzją to foum)
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.