Problemy z mysql_real_escape_string
 

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ść.

" /> Problemy z mysql_real_escape_string
 

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ść.

"/> Prosta klasa php do zarządzania bazą danych mysql cz.1

Start » Home > Blog > Prosta klasa php do zarządzania bazą danych mysql cz.1

Prosta klasa php do zarządzania bazą danych mysql cz.1

Autor: Daniel Goździk
|
31 August 2010
|
|
 
 
 

 

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.

REALIZACJA: Blog, MySQL, PHP

 
 

2 odpowiedzi do “Prosta klasa php do zarządzania bazą danych mysql cz.1”

  1. patryk 07 October 2010 at 21:42
    No, część drugą poproszę:)
    5
     
    • Daniel Goździk 29 October 2010 at 12:52
      Po nawale pracy udało się wreszcie opracować część drugą, która jest już dostępna tutaj
      9
       
 

Dodaj odpowiedź

 
 

 
 
Do góry