<?php
/**
* Klasa obsługi bazy danych opartej na MySQL
*
* @author Marek 'Rasgan' Bednarczuk <marek.bednarczuk@gmail.com>
* @copyright Marek 'Rasgan' Bednarczuk <marek.bednarczuk@gmail.com>
*
* @version 0.0.1
*
* @todo Poprawić obsługę błędów
*
*/
class CDBO {
/**
* Obiekt reprezentujący połączenie z bazą danych
*
* @var object
*/
var $connection;
/**
* Informacja czy została wybrana baza danych
*
* @var bool
*/
var $database;
/**
* Wartość pola auto_increment dla tabeli z aktualnego zapytania
*
* @var int
*/
var $last_id;
/**
* Ilość zapytań, jaka została wykonana na obiekcie CDBO
*
* @var int
*/
var $queries;
/**
* Obecne zapytanie SQL zadane bazie danych
*
* @var string
*/
var $query;
/**
* Tablica asocjacyjna z wynikiem zapytania SQL
*
* @var array()
*/
var $records;
/**
* Zasób wyniku zapytania SQL
*
* @var object
*/
var $result;
/**
* Funkcja zamknięcia połączenia z bazą danych i zwolnienia wszystkich zasobów.
Zwraca informację, czy połączenie zostało zerwane.
*
* @return bool
*/
public function close() {
if ( $this->connection ) {
if ( $this->result ) {
mysqli_free_result( $this->result );
}
@ mysqli_close( $this->connection );
unset( $this->database ); unset( $this->connection ); return true;
}
else {
$this->error();
return false;
}
}
/**
* Funkcja połączenia z bazą danych. Zwraca informację czy połączenie zostało za
inicjowane.
*
* @param string $host
* @param string $user
* @param string $pass
* @param string $dbname
* @return bool
*/
public function connect( $host, $user, $pass, $dbname ) {
$this->connection = @ mysqli_connect( $host, $user, $pass );
if ( $this->connection != false && $dbname != '' ) {
$this->database = @ mysqli_select_db( $this->connection, $dbname );
if ( $this->database ) {
return true;
}
else {
$this->error();
mysqli_close( $this->connection );
return false;
}
}
else {
$this->error();
return false;
}
}
/**
* Funkcja wyświetlania błędów związanych z obsługą bazy danych
*
*/
public function error() {
echo '<p class="error">' . mysqli_errno
( $this->connection ) . ' : ' . mysqli_error
( $this->connection ) . "</p>n"; }
/**
* Funkcja pobiera jeden wiersz z wyniku zapytania i zwraca go w postaci tablicy
asocjacyjnej.
*
* @return array()
*/
public function get_row() {
if ( $this->database && $this->result ) {
$this->records = mysqli_fetch_array( $this->result, MYSQLI_ASSOC );
if ( $this->records ) {
return $this->records;
}
else {
$this->error();
return false;
}
}
else {
$this->error();
return false;
}
}
/**
* Funkcja pobiera wszystkie wiersze z wyniku zapytania i zwraca je w postaci ta
blicy asocjacyjnej.
*
* @return array()
*/
public function get_rows() {
if ( $this->database && $this->result ) {
$i = 0;
while ( $row = mysqli_fetch_array( $this->result, MYSQLI_ASSOC ) ) {
$this->records[$i] = $row;
$i++;
}
return $this->records;
}
else {
$this->error();
return false;
}
}
else {
$this->error();
return false;
}
}
/**
* Funkcja zadania zapytania do bazy danych. Zwraca zasób wyniku zapytania SQL.
*
* @param string $sql
* @return object
*/
public function set_sql( $sql ) {
if ( $sql != '' && $this->database ) {
$this->query = $sql;
if ( $this->result ) {
mysqli_free_result( $this->result );
}
if ( $this->result = mysqli_query( $this->connection, $this->query ) ) {
$this->last_id = mysqli_insert_id( $this->connection );
$this->queries++;
return $this->result;
}
else {
$this->error();
return false;
}
}
else {
$this->error();
return false;
}
}
}
/*******************************/
/* */
/* Przykład zastosowania klasy */
/* */
/*******************************/
// inicjujemy nowy obiekt bazy danych
$db = new CDBO();
// łączymy się z bazą danych
$db->connect( 'localhost', 'root', '', 'test');
// zadejemy zapytanie bazie danych
$db->set_sql( 'SELECT * FROM test' );
// wyświetlamy wynik zapytania
// zrywamy połączenie z bazą danych
$db->close();
// niszczymy obiekt bazy danych
?>