Prosta klasa php do zarządzania bazą danych mysql cz.1
W naszych projektach bardzo często wykorzystujemy bazy danych MySQL. Dlatego stworzyliśmy klasę obsługującą połączenia z bazą danych MySQL, zapytania SQL do bazy oraz proste przechwytywanie błędów SQL.
Zaletą wykorzystania osobnej klasy do połączeń MySQL jest przede wszystkim jej szybka obsługa, większa przejrzystość kodu i możliwość zastosowania w wielu projektach.
Poniżej postaram się przedstawić prostą wersję takiej klasy oraz jej funkcjonalność.
Od początku – tworzymy klasę, nazwijmy ją… db (wiem, wiem niezbyt oryginalnie…) i deklarujemy kilka zmiennych:
Klasa db()
class db {
// na początek zmienny prywatne, niedostępne poza naszą klasą
private $db_host = 'localhost'; // podstawiamy host bazy danych
private $db_name = 'nazwa_bazy'; // podajemy nazwę bazy danych
private $db_user = 'admin'; // podajemy naszą nazwę użytkownika z uprawnieniami odczytu i zapisu
private $db_passw = 'passw'; // podajemy hasło dla użytkownika;
// zmienne publiczne - dostępne poza klasą
public $connection; // połączenie
public $error; // ew. błąd zwrócony przez bazę danych
}
Następnie tworzymy pierwszą funkcję wewnątrz naszej klasy. Funkcja będzie odpowiedzialna za połączenie i wybranie bazy danych:
Funkcja connect()
public function connect(){
if ($connection = mysql_connect($this->db_host, $this->db_user, $this->db_passw)) {
if(mysql_select_db($this->db_name, $connection)) {
$this->connection = $connection;
return true;
}
} else {
$this->error = mysql_error();
return false;
}
}
…i po kolei:
if ($connection = mysql_connect($this->db_host, $this->db_user, $this->db_passw)) {
Sprawdzamy czy uda nam się nawiązać połączenie, gdzie zmienne $this->db_host, $this->db_user, $this->db_passw, to prywatne zmienne zadeklarowane na początku naszej klasy.
$this oznacza odwołanie się do zmiennych bądź funkcji znajdujących się wewnątrz klasy.
Jeżeli połączenie zostanie nawiązane podstawiamy je pod zmienną $connection
...
if(mysql_select_db($this->db_name, $connection)) {
$this->connection = $connection;
return true;
...
Sprawdzamy czy uda nam się wybrać bazę danych. Jeżeli tak, pod zmienną publiczną $connection klasy podstawiamy, utworzone połączenie i zwracamy true …
...
} else {
$this->error = mysql_error();
return false;
}
} // eof connect()
… jeżeli nie, pod zmienną publiczną $error naszej klasy podstawiamy błąd MySQL, będziemy mogli go dowolnie sformatować poza klasą i przedstawić użytkownikowi. Następnie zwracamy false.
Funkcja select()
public function select($sql) {
if ($this->connection) {
mysql_set_charset('utf8', $this->connection);
if (isset($sql) && $sql != '') {
if($result = mysql_query($sql)) {
return $result;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Błąd zapytania SQL';
return false;
}
} else {
$this->error = 'Brak połączenia z bazą danych';
return false;
}
} // eof select()
…i analizujemy…
...
if ($this->connection) {
...
Sprawdzamy czy istnieje aktywne połączenie z bazą…
...
mysql_set_charset('utf8', $this->connection);
...
Tu coś ekstra
ustawiamy kodowanie dla naszego połączenia. Ja ustawiłem UTF-8. Z takiego kodowania korzystamy najczęściej, nie ma problemów z polskimi znakami, zwłaszcza przy edycji bazy z poziomu PhpMyAdmin . Możesz podstawić kodowanie z jakiego korzysta Twoja aplikacja lub pominąć tę linię jeżeli kwestię kodowania znaków rozwiązujesz w inny sposób.
...
if (isset($sql) && $sql != '') {
...
Sprawdzamy czy zmienna $sql zawierająca nasze zapytanie SQL do bazy została zdefiniowana i czy nie jest pusta.
...
if ($result = mysql_query($sql)) {
return result;
} else {
$this->error = mysql_error();
return false;
}
...
Wysyłamy zapytanie do bazy danych MySQL. Jeżeli operacja zakończy się powodzeniem, zwracamy wynik, jeżeli nie pod zmienną $error naszej klasy podstawiamy zwrócony przez bazę błąd SQL, a nasza funkcja zwraca false.
Kolejne linijki kodu funkcji odpowiadają odpowiednio za brak zapytania SQL przekazanego jako argument funkcji oraz za brak połączenia z bazą danych.
Funkcja query()
public function query($sql){
if (isset($sql) && $sql != '') {
if ($this->connection) {
mysql_set_charset('utf8', $this->connection);
if (mysql_query($sql)){
return true;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Brak połączenia z bazą danych';
return false;
}
} else {
$this->error = 'Błąd zapytania SQL';
return false;
}
} // eof query()
Funkcja query() służy do pozostałych operacji na bazie danych, takich jak INSERT czy UPDATE .
Obie funkcje są bardzo podobne, z tą różnicą, że funkcja select() w przypadku powodzenia zwraca nam wynik zapytania SQL na bazie, natomiast funkcja query() jedynie true jako potwierdzenie pomyślnego wykonania operacji.
Ostania funkcją naszej prostej klasy “bazodanowej” jest:
Funkcja close()
...
public function close(){
if ($this->connection){
if (mysql_close($this->connection)){
return true;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Brak aktywnego połączenia';
return false;
}
} // eof close()
...
Na koniec naszych operacji na bazie danych (SELECT, INSERT, UPDATE) zamykamy połączenie z nią.
Do zamknięcia połączenia z bazą danych używamy funkcji mysql_close() , gdzie jako argument podajemy aktywne połączenie – naszą zmienną publiczna $connection.
Tak więc cała nasza klasa db() wygląda następująco:
class db {
// deklarujemy zmienne naszej klasy
// na początek zmienny prywatne, niedostępne poza naszą klasą
private $db_host = 'localhost'; // podstawiamy host bazy danych
private $db_name = 'nazwa_bazy'; // podajemy nazwę bazy danych
private $db_user = 'admin'; // nazwa użytkownika z uprawnieniami odczytu i zapisu
private $db_passw = 'passw'; // podajemy hasło dla użytkownika;
// zmienne publiczne - dostępne poza klasą
public $connection; // połączenie
public $error; // ew. błąd zwrócony przez bazę danych
public function connect(){
if ($connection = mysql_connect($this->db_host, $this->db_user, $this->db_passw)) {
if(mysql_select_db($this->db_name, $connection)) {
$this->connection = $connection;
return true;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = mysql_error();
return false;
}
} // eof connect()
public function select($sql) {
if ($this->connection) {
mysql_set_charset('utf8', $this->connection);
if (isset($sql) && $sql != '') {
if($result = mysql_query($sql)) {
return $result;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Błąd zapytania SQL';
return false;
}
} else {
$this->error = 'Brak połączenia z bazą danych';
return false;
}
} // eof select()
public function query($sql){
if (isset($sql) && $sql != '') {
if ($this->connection) {
mysql_set_charset('utf8', $this->connection);
if (mysql_query($sql)){
return true;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Brak połączenia z bazą danych';
return false;
}
} else {
$this->error = 'Błąd zapytania SQL';
return false;
}
} // eof query()
public function close(){
if ($this->connection){
if (mysql_close($this->connection)){
return true;
} else {
$this->error = mysql_error();
return false;
}
} else {
$this->error = 'Brak aktywnego połączenia';
return false;
}
} // eof close()
}
Naszą klasę mamy całą i gotową do użycia w dowolnym projekcie, a raczej projektach, bo taki właśnie był cel tworzenia naszej klasy – możliwość szybkiej i łatwej implementacji w wielu projektach.
W części 2 postaram się przedstawić prosty sposób wykorzystania naszej klasy.


No, część drugą poproszę:)
Po nawale pracy udało się wreszcie opracować część drugą, która jest już dostępna tutaj