Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy taki manager baz jest dobry?
Utilaft
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

Ostrzeżenie: (10%)
X----


Witam. Uczę się z eduweb php oop. I jest taka klasa obsługująca bazę danych:


  1. <?php
  2.  
  3.  
  4. class DatabaseManager {
  5.  
  6. static public function getConnection() {
  7.  
  8. $conn = @new mysqli(DB_SERVER, DB_USERNAME, DB_PW, DB_DB);
  9.  
  10. if(mysqli_connect_errno()) {
  11. $conn_errno = mysqli_connect_errno();
  12. $conn_error = mysqli_connect_error();
  13.  
  14. // W przypadku wystąpienia problemów z połączeniem, zapisz informację w pliku LOG i zakończ działanie skryptu
  15. LogFile::AddLog("Nastapił błąd połączenia numer [ $conn_errno ] z bazą danych: o treści: [ $conn_error ]", __LINE__, __FILE__);
  16. exit();
  17.  
  18. } else {
  19.  
  20. $conn->query("SET NAMES 'utf8'");
  21. return $conn;
  22.  
  23. }
  24.  
  25. }
  26.  
  27. static public function selectBySQL($SQL) {
  28.  
  29. $conn = self::getConnection();
  30. //$SQL = $conn->real_escape_string($SQL);
  31. $result = $conn->query($SQL);
  32.  
  33. if(!$result) {
  34.  
  35. LogFile::AddLog("Wystąpił błąd połączenia z bazą danych!", __LINE__, __FILE__);
  36. return false;
  37.  
  38. } else {
  39.  
  40. $resultArray = Array();
  41.  
  42. while(($row = $result->fetch_array(MYSQLI_ASSOC)) !== NULL) {
  43.  
  44. $resultArray[] = $row;
  45. }
  46.  
  47. }
  48.  
  49. if(count($resultArray) > 0) {
  50. return $resultArray;
  51. } else {
  52. LogFile::AddLog("Zapytanie bazodanowe zwróciło pusty wynik!", __LINE__, __FILE__);
  53. return false;
  54. }
  55.  
  56. mysqli_close($conn);
  57.  
  58. }
  59.  
  60. static public function selectData($TABLE, $COLUMNS = Array("*"), $WHERE = Array(), $LOGIC_OPER = "=", $OPER = "AND") {
  61.  
  62. $conn = self::getConnection();
  63.  
  64. $SQL = "SELECT ";
  65.  
  66. if(count($COLUMNS) == 1) {
  67. $SQL .= $COLUMNS[0];
  68. } else {
  69. foreach($COLUMNS as $column) {
  70. $SQL .= $column.",";
  71. }
  72. }
  73.  
  74. $SQL = rtrim($SQL, ',');
  75.  
  76. $SQL .= " FROM {$TABLE}";
  77.  
  78. if(count($WHERE) > 0) {
  79.  
  80. $SQL .= " WHERE ";
  81.  
  82. foreach($WHERE as $key => $val) {
  83. $SQL .= $key.$LOGIC_OPER."'".$val."' ".$OPER." ";
  84. }
  85.  
  86. $SQL = substr($SQL, 0, strlen($SQL)-(strlen($OPER)+2));
  87.  
  88. }
  89.  
  90. $result = $conn->query($SQL);
  91.  
  92. if(!$result) {
  93.  
  94. LogFile::AddLog("Wystąpił błąd połączenia z bazą danych!", __LINE__, __FILE__);
  95. return false;
  96.  
  97. } else {
  98.  
  99. $resultArray = Array();
  100.  
  101. while(($row = $result->fetch_array(MYSQLI_ASSOC)) !== NULL) {
  102.  
  103. $resultArray[] = $row;
  104. }
  105.  
  106. }
  107.  
  108. if(count($resultArray) > 0) {
  109. return $resultArray;
  110. } else {
  111. LogFile::AddLog("Zapytanie bazodanowe zwróciło pusty wynik!", __LINE__, __FILE__);
  112. return false;
  113. }
  114.  
  115. mysqli_close($conn);
  116.  
  117. }
  118.  
  119. static public function updateTable($TABLE, $SET, $WHERE = Array(), $OPER = "AND") {
  120.  
  121. $conn = self::getConnection();
  122.  
  123. $SQL = "UPDATE {$TABLE} SET ";
  124.  
  125. foreach($SET as $key => $val) {
  126. $SQL .= $key."='".$val."',";
  127. }
  128.  
  129. $SQL = rtrim($SQL, ',');
  130.  
  131. if(count($WHERE) > 0) {
  132.  
  133. $SQL .= " WHERE ";
  134.  
  135. foreach($WHERE as $key => $val) {
  136. $SQL .= $key."='".$val."' ".$OPER." ";
  137. }
  138.  
  139. $SQL = substr($SQL, 0, strlen($SQL)-(strlen($OPER)+2));
  140.  
  141. }
  142.  
  143. $result = $conn->query($SQL);
  144.  
  145. if($result) {
  146. return true;
  147. } else {
  148. LogFile::AddLog("Zapytanie bazodanowe UPDATE nie wykonało się poprawnie!", __LINE__, __FILE__);
  149. return false;
  150. }
  151.  
  152. mysqli_close($conn);
  153.  
  154. }
  155.  
  156. static public function deleteFrom($TABLE, $WHERE = Array(), $OPER = "AND") {
  157.  
  158. $conn = self::getConnection();
  159.  
  160. $SQL = "DELETE FROM {$TABLE}";
  161.  
  162. if(count($WHERE) > 0) {
  163.  
  164. $SQL .= " WHERE ";
  165.  
  166. foreach($WHERE as $key => $val) {
  167.  
  168. $SQL .= $key."='".$val."' ".$OPER." ";
  169.  
  170. }
  171.  
  172. $SQL = substr($SQL, 0, strlen($SQL) - (strlen($OPER)+2));
  173.  
  174. }
  175.  
  176. $result = $conn->query($SQL);
  177. if(!($result)) {
  178. LogFile::AddLog("Usunięcie elementu bazy danych było nie możliwe do zrealizowania.", __LINE__, __FILE__);
  179. return false;
  180. } else {
  181. return true;
  182. }
  183.  
  184. mysqli_close($conn);
  185.  
  186. }
  187.  
  188. static public function insertInto($TABLE, $DATA) {
  189.  
  190. $conn = self::getConnection();
  191.  
  192. $SQL = "INSERT INTO {$TABLE}";
  193. $SQL .= " (";
  194.  
  195. foreach($DATA as $key => $val) {
  196. $SQL .= $key.",";
  197. }
  198.  
  199. $SQL = rtrim($SQL, ",");
  200. $SQL .= ") ";
  201. $SQL .= "VALUES";
  202. $SQL .= " (";
  203.  
  204. foreach($DATA as $val) {
  205. $SQL .= "'".$val."',";
  206. }
  207.  
  208. $SQL = rtrim($SQL, ',');
  209. $SQL .= ")";
  210.  
  211. $result = $conn->query($SQL);
  212. if(!($result)) {
  213. LogFile::AddLog("Wstawienie nowego elementu do bazy danych zakończyło się niepowodzeniem.", __LINE__, __FILE__);
  214. return false;
  215. } else {
  216. return true;
  217. }
  218.  
  219. mysqli_close($conn);
  220.  
  221. }
  222.  
  223. }
  224.  
  225. ?>

takie przykładowe zapytanie:

DatabaseManager::selectBySQL("bla");

Dodawanie rekordów też podobnie typu tablica. W kodzie wszystko macie.

Oraz config z automatycznym ładowaniem klas.


  1. <?php
  2.  
  3. // OKREŚLENIE POŁOŻENIA STRONY W SERWISIE - DEFINICJA <BASE ... />
  4. $AbsoluteURL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
  5. $dirCat = dirname($_SERVER['PHP_SELF']);
  6. $AbsoluteURL .= $_SERVER['HTTP_HOST'];
  7. $AbsoluteURL .= $dirCat != '\\' ? $dirCat : "";
  8. $slash = substr($AbsoluteURL, -1);
  9.  
  10. $NewURL = $slash != '/' ? $AbsoluteURL.'/' : $AbsoluteURL;
  11.  
  12.  
  13. // STAŁE DLA BAZY DANYCH
  14. define('DB_SERVER', 'localhost');
  15. define('DB_USERNAME', 'eduweb');
  16. define('DB_PW', 'eduweb2011');
  17. define('DB_DB', 'supercms');
  18.  
  19. // STAŁA DLA ADRESU I LOKALIZACJI APLIKACJI
  20. define('SERVER_ADDRESS', $NewURL);
  21.  
  22. // STAŁA DLA LOKALIZACJI KATALOGÓW I PLIKÓW
  23. define('LogFolder', 'LOG', true);
  24.  
  25. set_include_path(get_include_path(). PATH_SEPARATOR . "CLASS");
  26. set_include_path(get_include_path(). PATH_SEPARATOR . "CLASS/Managers");
  27. set_include_path(get_include_path(). PATH_SEPARATOR . "LIBRAY");
  28.  
  29. // Magiczna funkcja automatycznie ładująca klasy wg. zapotrzebowania
  30.  
  31. function __autoload($className) {
  32.  
  33. @include_once($className.".class.php");
  34.  
  35. }
  36.  
  37. ?>


Czy takie rozwiązanie jest dobre? Chciałbym używać tego, jako podstawy w moim przyszłych projektach.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Utilaft
post
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 19.01.2013

Ostrzeżenie: (10%)
X----


Myślałem ze ten kod będzie dobry, bo w końcu był nagrywany przez profesjonalistów (chyba?)

No tak, nie do końca jeszcze widzę sens stosowania metod statycznych.

Chciałem na tym kodzie się uczyć, mieć taką podstawę.
Go to the top of the page
+Quote Post
!*!
post
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(Utilaft @ 13.03.2013, 09:55:18 ) *
Myślałem ze ten kod będzie dobry, bo w końcu był nagrywany przez profesjonalistów (chyba?)

No tak, nie do końca jeszcze widzę sens stosowania metod statycznych.

Chciałem na tym kodzie się uczyć, mieć taką podstawę.


Profesjonaliści nie zrobiliby takiego syfu w kodzie. Im częściej widzę przykłady z ich kursów, tym bardziej mam wrażenie że piszą je początkujący. Zapoznaj się z podstawami np. PDO http://pl.wikibooks.org/wiki/PHP
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: 17.10.2025 - 02:15