Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL][PHP] Wysyłanie zapytania do mysql
Koldy
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 1
Dołączył: 28.06.2009
Skąd: Great Britan

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


Siemanko mam takie pytanie: Czy to jest poprawne? w sensie takim czy tak się używa.
  1. $ile = mysql_num_rows(mysql_query("SELECT cid FROM comments WHERE post='$jid'"));


Jak najlepiej robić zapytania i je wysyłać, bo jak tak sobie robie:
  1. $q = "SELECT * FROM comments, users WHERE comments.user = users.uid AND post='$jid' ORDER BY cid DESC";
  2. $qid = mysql_query($q);
  3. $ile = mysql_num_rows($qid);

to się trochę syf robi, jak dbacie o to by wasz kod był przejżysty przy powtarzających się rzeczach?
podzielcie się (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Nikt Cię nie rozniesie (IMG:style_emoticons/default/smile.gif)

Ale oczywiście to jest zły pomysł w dokładnie takiej formie... dlaczego? Bo każdorazowo łączy się z bazą...

Singleton jest powszechnie używany i sprawdzony (IMG:style_emoticons/default/smile.gif)

Co prawda można przerobić tą funkcję tak by to miało sens - ale nie ma co odkładać na bok sprawdzonych wzorców ;/

A dla tych co mają problem z obsługą wielu różnych połączeń do bazy i singletonem - mam dwa słowa - "fabryka singletonów" (IMG:style_emoticons/default/tongue.gif) - dziękuję (IMG:style_emoticons/default/smile.gif)

Zresztą wydaje mi się że każdy prosty DBAL jest zbudowany wstępnie w oparciu o singleton (IMG:style_emoticons/default/smile.gif)

Przykład pseudo fabryki singletonów do obsługi bazy danych:

  1. class Db
  2. {
  3. public static $connections = array();
  4. private static $instances = array();
  5.  
  6. public static getInstance($connectionName = 'default')
  7. {
  8. $data = self::$connections[$connectionName];
  9.  
  10. if(!isset(self::$instances[$connectionName]))
  11. self::$instances[$connectionName] = new PDO('mysql:host='.$data->host.';dbname='.$data->dbname, $data->user, $data->password);
  12. return self::$instances[$connectionName];
  13. }
  14.  
  15. public function addConnection($host,$user,$password,$dbname,$connectionName = 'default')
  16. {
  17. self::$connections[$connectionName] = new stdClass;
  18. self::$connections[$connectionName]->host = $host;
  19. self::$connections[$connectionName]->user = $user;
  20. self::$connections[$connectionName]->password = $password;
  21. self::$connections[$connectionName]->dbname = $dbname;
  22. }
  23. }
  24.  
  25. // przykład użycia:
  26.  
  27. // ustalamy dane do domyślnego połączenia:
  28. Db::addConnection('localhost','user','pass','tabelka');
  29. // i do drugiego:
  30. Db::addConnection('123.123.123.123','user2','pass2','tabelkaX','drugie');
  31.  
  32.  
  33. $db = Db::getInstance(); // pobieramy domyślne połączenie
  34.  
  35. // potem gdzie indziej możemy się do drugiego odwołać poprzez:
  36. $db = Db::getInstance('drugie');
  37.  
  38. // itd...
  39.  


EDIT: oczywiście przedstawiłem sam koncept bez obsługi wyjątków i sprawdzania błędów (IMG:style_emoticons/default/smile.gif)

Ten post edytował Sephirus 31.01.2012, 12:33:22
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 05:25