Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy warto stosować PEAR::DB w OOP oraz czy przechowywać dane w tabliczy czy w osobnych zmiennych ?
become
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 12.01.2007

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


mam taką klasę

  1. <?php
  2. class Autor() {
  3.  
  4.  var $oDB=null; # obiekt PEAR:(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) B;
  5.  var $aAutor=null; # zmienna przechowujaca dane autora
  6.  
  7.  function Autor($oDB=null) {
  8. if (!is_null($oDB)) $this->oDB=$oDB;
  9.  }
  10.  
  11.  function dbGetAutorById($id=null) {
  12.  
  13. if (is_null($id) return null;
  14.  
  15. $aQ="
  16.  SELECT *
  17.  FROM autor
  18.  WHERE id=?
  19. ";
  20.  
  21. $aA=$this->oDB->getRow($sQ, array($id), DB_FETCHMODE_ASSOC);
  22. if (is_array($aA) and count($aA)==1) $this->aAutor=$aA;
  23.  }
  24. }
  25. ?>


i pozniej sposob wykorzystania tego

  1. <?php
  2. include "PEAR/DB.php"; 
  3.  
  4.  $oDB=new DB();
  5.  $oDB->connect(DSN);
  6.  
  7.  $autor=new Autor($oDB);
  8.  $autor->dbGetAutorById(234);
  9. ?>


mam pytanie. czy mozna ją tą zbudować ? czy uzycie obiektu klasy PEAR:: DB i przekazanie jej do innej klasy w powyzszy sposob jest prawidlowe ? Czy wogole warto uzywać pakiet PEAR:: DB cyz moze cos innego ?

Drugie pytanie. Czy reprezentawac dane autora jako tablice czy raczej stworzyc osobne zmienne na np. pole imie, nazwisko, email, ktore bedą reprezentowac kolumny w tabeli ?

Ten post edytował become 28.11.2007, 13:22:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
NoiseMc
post
Post #2





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Ja jestem za tym zeby kazdy rekord z bazy byl reprezentowany jako obiekt z wlasciwosciami ... jakos tak bardziej mi czysto i ladnie wyglada.
Co do znakow zapytania to pewnie masz na mysli paramertyzowane zapytania ... i tak tez jest to mozliwe w PDO na dwa sposoby, wiecej tutaj: http://de2.php.net/pdo-prepare.

U mnie to wyglada tak:
  1. <?php
  2. class Products_Model extends Base_Model 
  3. {
  4. public function save (Products_Product $product)
  5. {
  6. $query = 'SELECT MAX(DisplayOrder) AS DisplayOrder FROM ' . $this->config->database->prefix . 'products LIMIT 1';
  7.  
  8. $statement = $this->db->prepare ($query);
  9. $statement->execute ();
  10.  
  11. $result = $statement->fetch ();
  12.  
  13. $maxDisplayOrder = ++$result['DisplayOrder'];
  14.  
  15. if (isset ($product->productID))
  16. {
  17. $query = 'UPDATE ' . $this->config->database->prefix . 'products SET CategoryID = ?, Name = ?, UrlSlug = ?, Copy = ?, MetaTitle = ?, MetaDescription = ?, MetaKeywords = ? WHERE ProductID = ?';
  18. }
  19. else 
  20. {
  21. $query = 'INSERT INTO ' . $this->config->database->prefix . 'products (CategoryID, Name, UrlSlug, Copy, MetaTitle, MetaDescription, MetaKeywords, 
    DisplayOrder) VALUES (?, ?, ?, ?, ?, ?, ?, ?)'
    ;
  22. }
  23.  
  24. $statement = $this->db->prepare ($query);
  25.  
  26. $statement->bindParam (1, $product->categoryID);
  27. $statement->bindParam (2, $product->name);
  28. $statement->bindParam (3, $product->urlSlug);
  29. $statement->bindParam (4, $product->copy);
  30. $statement->bindParam (5, $product->metaTitle);
  31. $statement->bindParam (6, $product->metaDescription);
  32. $statement->bindParam (7, $product->metaKeywords);
  33.  
  34. if (isset ($product->productID))
  35. {
  36. $statement->bindParam (8, $product->productID);
  37. }
  38. else 
  39. {
  40. $statement->bindParam (8, $maxDisplayOrder);
  41. }
  42.  
  43. $statement->execute ();
  44.  
  45. if (isset ($product->productID))
  46. {
  47. return $product->productID;
  48. }
  49. else 
  50. {
  51. return $this->getLastInsertID ();
  52. }
  53. }
  54. }
  55. ?>


Ten post edytował NoiseMc 28.11.2007, 16:28:36
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: 4.10.2025 - 21:44