Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa pdo MySQL
xxdrago
post 19.08.2013, 16:50:03
Post #1





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Witam, piszę aktualnie klasę obsługującą pdo, jest to w sumie jedna z moich zabawa jeśli chodzi o OOP....

Klasa na razie nie dokończona wygląda tak:
  1. <?php
  2.  
  3. /**
  4.  * MySQL CLASS
  5.  *
  6.  * @author Tomasz K. <xxdrago at gmail dot com>
  7.  * @copyright 2013
  8.  * @version 1.0
  9.  */
  10. class MySQL {
  11.  
  12. public function Connect($mysql_host, $database, $port, $kodowanie, $username, $password) {
  13. if (empty($port)) {
  14. $port = '3306';
  15. }
  16. if (empty($utf8)) {
  17. $kodowanie = 'utf8';
  18. }
  19. $pdo = new PDO('mysql:host=' . $mysql_host . ';dbname=' . $database . ';encoding=' . $kodowanie . ';port=' . $port, $username, $password);
  20. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21. $this->Connect = $pdo;
  22. }
  23.  
  24. public function insert($tabela, $data) {
  25.  
  26. # --------------------------------
  27. // Use
  28. // $MySQL->insert('tabela', $data);
  29. // $data = array
  30. // $data = array('nazwa' => 'test','wartosc' => 'wartosc');
  31. # --------------------------------
  32.  
  33. foreach ($data as $nazwa => $wartosc) {
  34. $datas[':' . $nazwa] = $wartosc;
  35. }
  36.  
  37. $klucze = implode(', ', array_keys($data));
  38. $wartosci = implode(', ', array_values($datas));
  39. $nazwa2 = implode(', ', array_keys($datas));
  40.  
  41. $stmt = $this->Connect->prepare('INSERT INTO ' . $tabela . ' (' . $klucze . ') VALUES(' . $nazwa2 . ')');
  42.  
  43. foreach ($data as $nazwa => $wartosc) {
  44. $stmt->bindValue(':' . $nazwa, $wartosc, PDO::PARAM_STR);
  45. }
  46. $stmt->execute();
  47. $stmt->closeCursor();
  48. }
  49.  
  50. public function select($tabela, $data) {
  51. // SELECT * FROM `config` LIMIT 0 , 30
  52. }
  53.  
  54.  
  55.  
  56. }
  57.  
  58. ?>



Chciałbym napisać sobie funkcję bindowania, żeby 10 razy nie pisać tego samego kodu.... No i własnie tu pojawiają się problemy... Kombinowałem jakoś tak:

  1. private function BindValue($data) {
  2. foreach ($data as $nazwa => $wartosc) {
  3. $stmt->bindValue(':' . $nazwa, $wartosc, PDO::PARAM_STR);
  4. }
  5. }


Tylko nie wiem jak to zrobić żeby to działało w praktyce, czyli żeby mi to bindowało, w innych funkcjach... smile.gif Można prosić o jakieś rady pomoc, oraz ew sugestie, co poprawić itp? smile.gif


--------------------
GG: 10972302 :)
Go to the top of the page
+Quote Post
vincent vega
post 20.08.2013, 08:10:22
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 30.06.2009

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


Troche Cie nie rozumiem, w dobrym kierunku kombinowałeś, dlaczego nie pociągnąłeś tematu ?
  1. private function bindValues($stmt, $data) {
  2. foreach ($data as $nazwa => $wartosc) {
  3. // Czasami zmienna bedzie innego typu niz string
  4. $value = $wartosc;
  5. $type = PDO::PARAM_STR;
  6. if (is_array($wartosc) && isset($wartosc['value'], $wartosc['type'])) {
  7. $type = $wartosc['type'];
  8. $value = $wartosc['value'];
  9. }
  10. $stmt->bindValue(':' . $nazwa, $value, $type);
  11. }
  12. }
  13. // Sposob wywolania
  14. public function someMethod() {
  15. $stmt = $this->Connect->prepare(...);
  16. $this->bindValues($stmt, array(
  17. 'active' => array(
  18. 'value' => True,
  19. 'type' => PDO::PARAM_BOOL
  20. ),
  21. 'name' => 'default string type'
  22. )));
  23. }


Ten post edytował vincent vega 20.08.2013, 08:11:24
Go to the top of the page
+Quote Post
xxdrago
post 20.08.2013, 20:07:55
Post #3





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Zrobiłem wszystko, doszedłem... Tylko czy dobrze wywołuje tą funkcje w innych funkcjach? hehe:

  1. <?php
  2.  
  3. /*
  4.  * MySQL CLASS
  5.  *
  6.  * @author Tomasz K. <xxdrago at gmail dot com>
  7.  * @copyright 2013
  8.  * @version 1.0
  9.  */
  10.  
  11. class MySQL {
  12.  
  13. public function Connect($mysql_host, $database, $port, $kodowanie, $username, $password) {
  14. # --------------------------------
  15. // Use
  16. // $MySQL->Connect('localhost', 'datbase', 'encoding', 'port', 'username', 'password');
  17. # --------------------------------
  18. if (empty($port)) {
  19. $port = '3306';
  20. }
  21. if (empty($utf8)) {
  22. $kodowanie = 'utf8';
  23. }
  24. $pdo = new PDO('mysql:host=' . $mysql_host . ';dbname=' . $database . ';encoding=' . $kodowanie . ';port=' . $port, $username, $password);
  25. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  26. $this->Connect = $pdo;
  27. }
  28.  
  29. private function BindValue($data, $stmt) {
  30. foreach ($data as $nazwa => $wartosc) {
  31. $stmt->bindValue(':' . $nazwa, $wartosc, PDO::PARAM_STR);
  32. }
  33.  
  34. return $stmt;
  35. }
  36.  
  37. private function Where($data) {
  38. $data = array_flip($data);
  39. $ostatni = end($data);
  40. $data = array_flip($data);
  41. $where = 'WHERE ';
  42. foreach ($data as $nazwa => $wartosc) {
  43. if (count($data) > 1) {
  44. if ($nazwa != $ostatni) {
  45. $where.='' . $nazwa . '= :_' . $nazwa . ' ';
  46. } else {
  47. $where.='AND ' . $nazwa . '= :_' . $nazwa . '';
  48. }
  49. } else {
  50. $where.='' . $nazwa . '= :_' . $nazwa . ' ';
  51. }
  52. }
  53.  
  54. return $where;
  55. }
  56.  
  57. public function insert($tabela, $data) {
  58.  
  59. # --------------------------------
  60. // Use
  61. // $MySQL->insert('tabela', $data);
  62. // $data = array
  63. // $data = array('nazwa' => 'test','wartosc' => 'wartosc');
  64. # --------------------------------
  65.  
  66. foreach ($data as $nazwa => $wartosc) {
  67. $datas[':' . $nazwa] = $wartosc;
  68. }
  69.  
  70. $klucze = implode(', ', array_keys($data));
  71. $wartosci = implode(', ', array_values($datas));
  72. $nazwa2 = implode(', ', array_keys($datas));
  73.  
  74. $stmt = $this->Connect->prepare('INSERT INTO ' . $tabela . ' (' . $klucze . ') VALUES(' . $nazwa2 . ')');
  75.  
  76. self::BindValue($data, $stmt);
  77.  
  78. $stmt->execute();
  79. $stmt->closeCursor();
  80. }
  81.  
  82. public function update($tabela, $data, $where) {
  83. # --------------------------------
  84. // Use
  85. // $MySQL->update($tabela, $data, $where);
  86. // $data = array
  87. // $where = array MAX 2
  88. # --------------------------------
  89.  
  90. $data = array_flip($data);
  91. $ostatni = end($data);
  92. $data = array_flip($data);
  93.  
  94. foreach ($data as $nazwa => $wartosc) {
  95. $datas[':' . $nazwa] = $wartosc;
  96. }
  97.  
  98. foreach ($where as $nazwa => $wartosc) {
  99. $wheree[0] = $nazwa;
  100. $wheree[1] = $wartosc;
  101. }
  102.  
  103. foreach ($where as $nazwa => $wartosc) {
  104. $data2['_' . $nazwa] = $wartosc;
  105. }
  106.  
  107.  
  108. $wartosci = 'UPDATE ' . $tabela . ' SET ';
  109. foreach ($data as $nazwa => $wartosc) {
  110. if ($nazwa != $ostatni) {
  111. $wartosci.= $nazwa . '=' . ':' . $nazwa . ', ';
  112. } else {
  113. $wartosci.= $nazwa . '=' . ':' . $nazwa;
  114. }
  115. }
  116. $wartosci.= ' ' . self::Where($where) . ' LIMIT 1;';
  117. $stmt = $this->Connect->prepare($wartosci);
  118.  
  119. self::BindValue($data, $stmt);
  120. self::BindValue($data2, $stmt);
  121.  
  122. $stmt->execute();
  123. $stmt->closeCursor();
  124. }
  125.  
  126. public function delate($tabela, $where) {
  127. # --------------------------------
  128. // Use
  129. // $MySQL->delate($tabela, $where);
  130. // $tabela = ;
  131. // $where = array MAX 2
  132. # --------------------------------
  133.  
  134.  
  135. $zapytanie = 'DELETE FROM ' . $tabela . ' ' . self::Where($where);
  136. foreach ($where as $nazwa => $wartosc) {
  137. $data['_' . $nazwa] = $wartosc;
  138. }
  139.  
  140. $stmt = $this->Connect->prepare($zapytanie);
  141.  
  142. self::BindValue($data, $stmt);
  143. $stmt->execute();
  144. $stmt->closeCursor();
  145. }
  146.  
  147. public function select($tabela, $order, $where, $limit) {
  148.  
  149. if (empty($order)) {
  150. $orderr = '';
  151. } else {
  152. foreach ($order as $nazwa => $wartosc) {
  153. $order[0] = $nazwa;
  154. $order[1] = $wartosc;
  155. }
  156.  
  157. $orderr = ' ORDER BY ' . $order[0] . ' ' . $order[1];
  158. }
  159. // SELECT *
  160. //FROM `config`
  161. //ORDER BY `wartosc` ASC
  162. //LIMIT 0 , 30
  163.  
  164. // $select = 'SELECT * FROM' . $tabela . $orderr . ' LIMIT 0, ' . $limit;
  165.  
  166. //$stmt = $this->Connect->prepare($zapytanie);
  167.  
  168. // self::BindValue($data, $stmt);
  169. }
  170.  
  171. }
  172.  
  173. ?>



Znalazłem to self::BindValue($data, $stmt); , gdzieś w innej klasie... chciałem więcej poczytać o OOP ale za cholere nic nie idzie znaleźć na internecie, wcześniej chodziło mi o to, że nie wiedziałem jak wywołać tą funkcje... Takie pytanie w dobrym kierunku idę? biggrin.gif

Ten post edytował xxdrago 20.08.2013, 20:09:51


--------------------
GG: 10972302 :)
Go to the top of the page
+Quote Post
vincent vega
post 20.08.2013, 21:42:01
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 30.06.2009

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


Na razie na oślep. Musisz zainwestować w zrozumienie jak zbudowana jest klasa: http://php.pl/Wortal/Artykuly/PHP/Podstawy...-poczatkujacych Wtedy podejmiesz decyzję czy zrobić z BindValue metodę statyczną czy zmienić jej wywołania ze statycznych na zwykłe.

Ten post edytował vincent vega 20.08.2013, 21:46:03
Go to the top of the page
+Quote Post
xxdrago
post 21.08.2013, 13:31:11
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Tylko czym się różni metoda statyczna od metody zwykłej? smile.gif Ma to jakieś znaczenie? smile.gif


--------------------
GG: 10972302 :)
Go to the top of the page
+Quote Post
vincent vega
post 21.08.2013, 14:24:42
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 30.06.2009

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


Ma, ale na to pytanie musisz odpowiedzieć sobie sam, musisz sam to zrozumieć a nie kopiować czyjeś myśli smile.gif
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:55