php mysql class: phpgotomysql2, una classe php per l’interazione con mysql

phpgotomysql2 php mysql class

phpgotomysql2 è una classe PHP che permette di interagire con un database MySQL ed eseguire query e operazioni CRUD. Permette di gestire comodamente, attraverso la sola configurazione di opportuni parametri, paginazioni di dati e relazioni tra tabelle (relazioni di tipo uno-a-molti e molti-a-molti).

Se stai pensando che, di classi del genere, ne esistono già tantissime sappi che hai fatto la scoperta dell’America 😀

Tieni a mente: più ce ne sono, meglio è 🙂

Ho deciso di rilasciare in open source (sotto licenza GPL) questa classe che ho scritto convinto che la condivisione sia un vantaggio per tutti.

Puoi usare la classe gratuitamente nei tuoi progetti, contribuire a migliorarla, magari, inviandomi il tuo parere, consigli per migliorarla/estenderla e/o segnalarmi eventuali bug.

Trovi il link per scaricare la classe alla fine del post 😉

Nel pacchetto ZIP troverai il file della classe più alcuni file di esempio. Ora vediamo quali metodi offre la classe e, dopo, un pò di esempi con cui potrai visionarne il codice e capirne il funzionamento 🙂

getParams() questo metodo permette di settare i parametri di connessione al database
connect() questo metodo esegue la connessione al database
close() questo metodo esegue la disconnessione al database
query() questo metodo esegue una query SQL
lastQuery() questo metodo restituisce l’ultima query eseguita
lastId() questo metodo restituisce l’ultimo ID generato da una query INSERT
numRows() questo metodo restituisce il numero di record interessati da una query SELECT
affectedRows() questo metodo restituisce il numero di record interessati da una query INSERT, UPDATE o DELETE
error() questo metodo restituisce il messaggio di errore generato da una query fallita
tableExsist() questo metodo verifica se una tabella esiste nel database
select() questo metodo esegue una query di tipo SELECT
setQueryString() questo metodo permette di salvare i parametri in querystring per non perderli cliccando sui link di una paginazione di dati
nextPagination() questo metodo visualizza una paginazione di dati eseguita con i link “avanti” e “indietro”
numberPagination() questo metodo visualizza una paginazione di dati eseguita con i link “1,2,3…ecc.”
totPages() questo metodo restituisce il numero totale di pagine in una paginazione di dati
currentPage() questo metodo restituisce la pagina corrente in una paginazione di dati
read() questo metodo restituisce il valore di un campo di un record in base a una condizione
cleanVar() questo metodo ripulisce le variabili che dovranno essere memorizzate nel database tramite query INSERT/UPDATE in modo da prevenire attacchi di tipo SQL Injection
insert() questo metodo esegue una query di tipo INSERT
update() questo metodo esegue una query di tipo UPDATE
delete() questo metodo esegue una query di tipo DELETE

Vediamo adesso alcuni esempi di codice con cui potrai comprendere il funzionamento della classe 🙂

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
 
if ($db->connect()) echo "connessione riuscita";
else echo "connessione fallita!";

Con il precedente codice abbiamo incluso e istanziato la classe e richiamato il metodo getParams() a cui abbiamo passato un’array associativo contenente i parametri di connessione al database. Abbiamo, poi, aperto la connessione richiamando il metodo connect().

I parametri di configurazione possono essere passati direttamente nel costruttore invece di utilizzare il metodo getParams(). La classe, per l’interazione con MySQL, utilizza di default le librerie mysqli. Se volete utilizzare le mysql functions (deprecate dalla versione 5.5.0 di PHP) è sufficiente impostare il parametro di configurazione db_driver su “mysql”.

 
$config = array(
	'db_driver'=>'mysqli',
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db = new phpgotomysql($config);
 
$db->connect();

Vediamo adesso l’utilizzo del metodo query() con cui effettueremo una query alla tabella “users” per leggere i valori dei campi “id” e “name“:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$result = $db->query("SELECT * FROM users");
 
while ($row = mysqli_fetch_assoc($result)) {
 
    echo $row["id"] ." - " .$row["name"] ."<br />";
 
}
 
$db->close();

Ora diamo un’occhiata al metodo countRow() con cui possiamo conoscere il numero di record che corrispondono a una query. Nell’esempio contiamo i record della tabella users che hanno il campo name uguale a “mike”:

 
include("phpgotomysql.php");
 
$config = array(
	'db_driver'=>'mysqli',
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db = new phpgotomysql($config);
 
$db->connect();
 
$params = array(
	'table'=>'users',
	'where'=>"name='mike'"
);
 
$num = $db->countRow($params);
 
echo($num);
 
$db->close();

Vediamo ora l’utilizzo del metodo select() a cui passeremo un’array associativo con cui configureremo la query:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'table'=>'users',
	'order'=>'name ASC'
);
 
$row = $db->select($params);
 
foreach($row as $value) {
 echo $value["id"] ." - " .$value["name"] ."<br />";
}
 
$db->close();

Se avessimo avuto bisogno di specificare una condizione avremmo predisposto l’array dei parametri nel seguente modo:

 
$params = array(
	'table'=>'users',
	'order'=>'name ASC',
	'where'=>'id=1 OR id=2'
);

Se, invece del ciclo foreach, preferivi usare il ciclo for:

 
for ($i=0;$i<$db->numRows();$i++) {
echo $row[$i]["id"] ." - " .$row[$i]["name"] ."<br />";
}

Adesso vediamo un esempio di paginazione di dati (10 record per pagina). Come puoi vedere, per impostare la paginazione, è sufficiente aggiungere all’array di configurazione le variabili “per_page” che indica il numero di record per pagina e la variabile “page” che indica la pagina corrente:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$page = 1;
if (isset($_GET["page"])) $page = $_GET["page"];
 
$params = array(
	'table'=>'users',
	'order'=>'name ASC',
	'per_page'=>10,
	'page'=>$page
);
 
$row = $db->select($params);
 
for ($i=0;$i<$db->numRows();$i++) {
	echo $row[$i]["id"] ." - " .$row[$i]["name"] ."<br />";
}
 
echo "Pagina " .$db->currentPage() ." di " .$db->totPages();
 
$params = array(
    'prev'=>'Prev',
    'next'=>'Next',
    'titlePrev'=>'Vai alla pagina precedente',
    'titleNext'=>'Vai alla pagina successiva'
); 
 
echo $db->nextPagination($params);
 
$db->close();

Se, invece della paginazione con i link “avanti” e “indietro“, vogliamo usare quella con i link numerati (1, 2, 3…ecc.) possiamo usare il metodo numberPagination():

 
echo $db->numberPagination("Vai alla pagina numero",10);

Il primo parametro è il testo visualizzato nell’attributo “title” dei link; il secondo è il numero di pagine “contigue” da visualizzare per ogni link.

Per avere accesso diretto all’informazione contenuta in un preciso campo di un record possiamo utilizzare il metodo read(). Nel seguente esempio visualizzeremo il contenuto del campo “name” del record con id uguale a 2 della tabella “users“:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'table'=>'users',
	'field'=>'name',
	'condition'=>'id=2'
);
 
echo $db->read($params);
 
$db->close();

Ora vediamo come gestire le relazioni tra le tabelle del database. Poniamo il caso di avere la tabella users che ha una relazione di tipo uno-a-molti con le tabelle user_actions e user_sents. La chiave primaria della tabella users (id) corrisponderà alla chiave esterna nelle altre due tabelle (user_id):

one-to-many

nel codice sarà sufficiente passare al metodo select l’array di configurazione join specificando la chiave di partenza (key) e la chiave esterna (foreignKey):

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'table'=>'users',
	'order'=>'name ASC',
	'join'=>array(
		array(
		'type'=>'inner',
		'table'=>'user_actions',
		'key'=>'id',
		'foreignKey'=>'user_id'
		),
		array(
		'type'=>'inner',
		'table'=>'user_sents',
		'key'=>'id',
		'foreignKey'=>'user_id'
		)
	 )
);
 
$row = $db->select($params);
 
foreach($row as $value) {
 echo $value["id"] ." - " .$value["name"] ."<br />";
}
 
$db->close();

Immaginiamo ora di avere una relazione di tipo molti-a-molti tra le tabelle users e projects. La tabella users_projects sarà la tabella di collegamento tra le due relazionate e conterrà le due chiavi di partenza (key1, key2) e le due chiavi esterne (foreignKey1foreignKey2):

hasMany

Per implementare questo tipo di relazione sarà sufficiente passare al metodo select l’array di configurazione hasMany dove table indica la tabella con cui stabilire la relazione; joinTable indica la tabella di collegamento tra le due tabelle relazionate mentre key1/foreignKey1 e key2/foreignKey2 sono le chiavi di partenza ed esterne:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'table'=>'users',
	'order'=>'name ASC',
	'hasMany'=>array(
		array(
			'table'=>'projects',
			'joinTable'=>'users_projects',
			'key1'=>'id',
			'foreignKey1'=>'user_id',
			'key2'=>'id',
			'foreignKey2'=>'project_id'
		)
	)
);
 
$row = $db->select($params);
 
foreach($row as $value) {
 echo $value["id"] ." - " .$value["name"] ."<br />";
}
 
$db->close();

Vediamo ora l’utilizzo del metodo insert() per inserire nuovi record in una tabella:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'name'=>'john',
	'surname'=>'doe'
);
 
$result = $db->insert("users",$params);
 
if ($result) echo "inserimento effettuato";
else echo "inserimento fallito";
 
$db->close();

Per prevenire attacchi di tipo SQL Injection si può utilizzare il metodo $db->cleanVar($variable) per le variabili passate nelle condizioni delle query. Questo metodo è previsto di default per le variabili passate come parametri dei metodi insert e update.

Vediamo ora il metodo update():

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$params = array(
	'name'=>'luke',
	'surname'=>'skywalker'
);
 
$result = $db->update("users",$params,"id=27");
 
if ($result) echo "modifica effettuata";
else echo "modifica fallita";
 
$db->close();

Vediamo ora l’utilizzo del metodo delete() per eliminare record da una tabella:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$result = $db->delete("users","id=27");
 
if ($result) echo "cancellazione effettuata";
else echo "cancellazione fallita";
 
$db->close();

In fase di debug può essere utile visualizzare l’ultima query eseguita; il metodo lastQuery() è utile allo scopo:

 
include("phpgotomysql.php");
 
$db = new phpgotomysql();
 
$config = array(
	'db_host'=>'localhost',
	'db_user'=>'root',
	'db_pass'=>'password',
	'db_name'=>'test',
	'charset'=>'utf8'
);
 
$db->getParams($config);
$db->connect();
 
$result = $db->query("SELECT * FROM users");
 
while ($row = mysqli_fetch_assoc($result)) {
    echo $row["id"] ." - " .$row["name"] ."<br />";
}
 
echo $db->lastQuery();
 
$db->close();

Se scarichi e utilizzi la classe significa che hai letto e dato il tuo assenso alle seguenti condizioni:

– EmaWebDesign non si assume alcuna responsabilità, implicita od esplicita, su eventuali danni provocati dall’uso proprio o improprio di questo script.
– chi utilizza questo script lo utilizza completamente a suo rischio e pericolo assumendosene tutte le responsabilità.

Versione 1.2
Licenza GPL

http://www.emawebdesign.com/wp-content/plugins/downloads-manager/img/icons/winzip.gif download: phpGotoMySQL2 1.2 version (14.03KB)
added: 25/04/2013
clicks: 1336
description: versione 1.2 della classe phpgotomysql2. phpgotomysql2 è una classe PHP che consente di interagire con un database MySQL ed effettuare query e operazioni CRUD.

Changelog n°2 24/04/2013

– Risolto un bug nella paginazione dei dati di una query. In presenza della clausola WHERE, il numero di pagine, non era corretto.

Versione 1.1
Licenza GPL

http://www.emawebdesign.com/wp-content/plugins/downloads-manager/img/icons/winzip.gif download: phpGotoMySQL2 1.1 version (13.56KB)
added: 21/01/2013
clicks: 1213
description: versione 1.1 della classe phpgotomysql2. phpgotomysql2 è una classe PHP che consente di interagire con un database MySQL ed effettuare query e operazioni CRUD.

Changelog n°1 20/01/2013

– Aggiornato il metodo cleanVar.
– Aggiunto il costruttore, i parametri di configurazione della classe possono essere passati nel costruttore.
– Aggiunte le librerie mysqli, sono quelle predefinite della classe ma si può decidere per le mysql functions impostando il parametro di configurazione “db_driver” su “mysql”.
– Aggiunto il metodo countRow.

Versione 1.0
Licenza GPL

http://www.emawebdesign.com/wp-content/plugins/downloads-manager/img/icons/winzip.gif download: phpgotomysql2 (11.80KB)
added: 05/11/2012
clicks: 1520
description: phpgotomysql2 è una classe PHP che consente di interagire con un database MySQL ed effettuare query e operazioni CRUD.