Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa pdo MySQL
Forum PHP.pl > Forum > PHP > Object-oriented programming
xxdrago
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
vincent vega
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. }
xxdrago
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
vincent vega
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.
xxdrago
Tylko czym się różni metoda statyczna od metody zwykłej? smile.gif Ma to jakieś znaczenie? smile.gif
vincent vega
Ma, ale na to pytanie musisz odpowiedzieć sobie sam, musisz sam to zrozumieć a nie kopiować czyjeś myśli smile.gif
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.