Classe Gestione Mysql

Ciao ragazzi, so che ne esistono a migliaia di classi del genere ma per imparare bene la programmazione ad oggetti mi è venuto in mente di cominciare ad imparare con questo genere di classe proprio perchè la documentazione a riguardo è davvero ampia.

Vi posto qui di seguito la classe, nella speranza che qualcuno di voi mi aiuti nell'apprendere meglio il concetto di OOP per quanto possibile, e mi aiuti a migliorare la classe stessa in modo tale da aggiungere altre funzioni e magari renderla più elegante stilisticamente.

<?php

class Mysql {

  protected $DBconnection;
  
  public function __construct() {
  $this->DBconnection = $DBconnection;
  }

  public function StartConnection($host, $user, $pass) {
  $this->DBconnection = mysql_connect($host, $user, $pass) or die ("Impossibile avviare la connessione al database: " . FormattedError());
  return $this->DBconnection;
  }
  
  public function SelectDatabase($database) {
  mysql_select_db($database, $this->DBconnection) or die("Impossibile selezionare il database impostato: " . mysql_error());
  }
  
  public function CreateDatabase($database) {
  $this->DoQuery("CREATE DATABASE $database");
  }
  
  public function DoQuery($query) {
  mysql_query($query);
  }
  
  public function CloseConnection() {
  mysql_close($this->DB);
  }

}  

?>
inviato 8 anni fa
Pixelate
modificato 8 anni fa
X 0 X

PS: il FormattedError() è una funzione che doveva formattare l'errore MYSQL non più implementata, ho dimenticato di reimpostarla come mysql_error().

risposto 8 anni fa
Pixelate
X 0 X

C'è un errore nel costruttore che utilizza la variabile $DBconnection ma non si capisce da dove possa venire.

Inoltre questa classe permette di effettuare query ma non la fetch dei risultati.

Ti consiglio i studiare le classi delle estensioni MySQLi e soprattutto PDO

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ti ringrazio per il consiglio, lo farò, anche se prima voglio provarci da solo; stavo adesso estendendo la classe anche a mssql:

Potresti consigliarmi una buona guida online riguardo la programmazione ad oggetti PHP?

Inoltre la classe precedente, sinceramente come la giudicheresti, secondo te ha delle potenzialità se ampliata, è abbastanza chiara?

risposto 8 anni fa
Pixelate
modificato 8 anni fa
X 0 X

Una classe non può essere giudicata a priori ma solo in funzione degli scopi che si prefigge e dell'architettura dell'intero sistema, ovvero l'insieme delle altre classi che costituiscono l'applicazione.

La classe che hai riportto presenta la lacuna che ti ho già segnalato: effettua le query ma non la fetch. Questo approccio in realtà è corretto se il metodo che effettua la query mi restituisce qualcosa (un oggetto?) per effettuare la fetch.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ho apportato qualche modifica per capire se sono sulla strada giusta, potresti dirmi cosa ne pensi adesso? Soddisfa minimamente il concetto di classe?

Ecco il codice:

<?php

class Mysql {

  public function StartConnection($host, $user, $pass) {
  $this->DBconnection = mysql_connect($host, $user, $pass) or die ("Impossibile avviare la connessione al database.");
  return $this->DBconnection;
  }
  
  public function SelectDatabase($database) {
  mysql_select_db($database, $this->DBconnection) or die ("Impossibile selezionare il database impostato.");
  }
  
  public function CreateDatabase($database) {
  $this->DoQuery("CREATE DATABASE $database");
  }
  
  public function DoQuery($query) {
  $this->Query = mysql_query($query);
  return $this->Query;
  }
  
  public function QueryNumRows() {
  return mysql_num_rows($this->Query); 
  }
  
  public function QueryFetchArray() {
  return mysql_fetch_array($this->Query);
  }
  
  public function QueryFetchObject() {
  return mysql_fetch_object($this->Query);
  }
  
  public function CloseConnection() {
  mysql_close($this->DBconnection);
  }
  
}

?>
risposto 8 anni fa
Pixelate
X 0 X

A prima vista la classe sembra adesso più efficace. Gli attributi però ($this->DBconnection, $this->Query) andrebberò definiti in testa e non usati implicitamente nel codice.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

A prima vista la classe sembra adesso più efficace. Gli attributi però ($this->DBconnection, $this->Query) andrebberò definiti in testa e non usati implicitamente nel codice.

 :bye:

potresti farmi un esempio?

mi basta dichiarare es:

public $DBconnection? è questo che intendi?

risposto 8 anni fa
Pixelate
X 0 X

Si, intendo proprio quello.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda