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

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: 15.10.2025 - 14:46