Guida PDO: come iniziare e connessione al database

Guida PDO: come iniziare e connessione al database
Freia

Oggi voglio aprire con una nuova rubrica tematica, dopo jQuery, HTML5, e Crea il tuo cms voglio affrontare un argomento ancora “vergine” nel panorama italiano. PDO è una comoda estensione implementata con le nuove versioni di PHP che permette di interfacciarsi molto più facilmente e con molta più sicurezza al vostro database mysql. Vediamo cosa offre nel dettaglio.

Introduzione

PDO sta per PHP Data Objects e non si tratta propriamente di un NUOVO linguaggio, anche se di fatto ci toccherà imparare molte cose. Con le nuove versioni di php (>5) il panorama di sviluppo si è trovato davanti a una scelta: passare a usare mysqli o PDO. Non si tratta di una scelta “di stile” ma quasi obbligata dato che moltissime funzioni di mysql “classico” sono state deprecate e finiranno presto in disuso. Se non volete rimanere indietro anche voi dovrete fare la vostra scelta. In questo primo articolo analizzerò insieme a voi i pro e i contro delle due estensioni e vedremo come connetterci correttamente al database con PDO.

Cosa scelgo PDO o MYSQLi?

Le differenze sono molte, ad esempio, secondo alcune ricerche, PDO si è rivelato più veloce di mysqli e, cosa più importante, permette a differenza del suo antagonista di interfacciarsi non solo con un database mysql ma anche con altri db come ad esempio PostgreSQL e moltissimi altri. Solo questa caratteristica vi dovrebbe far scegliere ad occhi chiusi PDO. Pensate ad esempio a un’applicazione web. L’avete sviluppata tempo fa in PHP/MYSQL ma per varie ragioni dovete traslare il tutto su un database diverso da mysql. Bhè direi che il panico si è già impossessato di voi. Grazie all’uso di PDO invece potrete traslare il tutto grazie a una comoda funzionalità chiamata “driver”.

Oltre a questo anche dal lato “sicurezza” PDO implementa ottime feature di filtraggio avanzato (e integrato) di caratteri dannosi e molte altre caratteristiche molto interessanti per prevenire gli attacchi più comuni senza più sforzarsi troppo (vedi i prossimi articoli per farti un’idea più precisa).

Insomma da queste semplici considerazioni ormai avrete già capito da “che parte” mi sono schiarato.Reputo PDO una vera rivoluzione e la differenza si vede (anche in termini prestazionali e di sicurezza), per usare PDO vi basterà installare l’ominima estensione nel vostro server e il gioco è fatto 😉

NOTA IMPORTANTE: Se possiedi un hosting su aruba, netsons o sui maggiori hoster italiani ed esteri hai già attivo il modulo di default già da qualche mese quindi non preoccuparti!

NOTA IMPORTANTE 2: Se usi un Webserver locale come XAMPP EasyPHP o altro assicurati di avere aggiornato il programma, nelle nuove versioni è già presente attivato nativamente!

Siamo davvero obbligati al salto generazionale? Bhè direi di si.Eccovi un esempio.

Se siete abituati a mysql “classico” conoscerete sicuramente la funzione  mysql_real_escape_string (se non la conosci ti consiglio di impararla in fretta!). Nel caso di cui sopra, ad esempio, la funzione  mysql_real_escape_string è stata sostituita in PDO con quote().

Accedendo infatti alla reference ufficiale di  mysql_real_escape_string troviamo infatti un avviso che ci informa che la funzione cercata è DEPRECATA, pertanto dobbiamo scegliere due strade : mysqli_real_escape_string o PDO (quote). Ovviamente moltissime altre funzioni basilari sono state deprecate. Guardate la reference guide per farvi un’idea.

Connessione al database

Per connettersi al database scordatevi la classica chiamata mysql_connect. Per accedere al mysql usiamo questo codice:

	//CONNESSIONE AL DATABASE E GESTIONE ERRORI
	$col = 'mysql:host=127.0.0.1;dbname=pdo';

	// blocco try per il lancio dell'istruzione
	try {
	  // connessione tramite creazione di un oggetto PDO
	  $db = new PDO($col , 'root', ''); //tra le virgolette un eventuale password
	}

	// blocco catch per la gestione delle eccezioni
	catch(PDOException $e) {

	  // notifica in caso di errorre
	  echo 'Attenzione: '.$e->getMessage();
	}

Il codice non differisce molto dal mysql normale, in quanto con $col creo un collegamento selezionando il database corretto. Dopodichè con try cerco di accedere con nome utente e password. Se try non va a buon fine creo una routine per la gestione degli errori (così da capire meglio cosa modificare).

Dividere i file di connessione

Come ormai sapete è sempre bene dividere i file di connessione. pertanto creiamo due file: config.php e connessione_db.php proprio come eravamo abituati con mysql classico. Fatto questo componiamo i due file come segue:

Come al solito il file config.php contiene le informazioni necessarie alla connessione al nostro database. P.sVariano al seconda del vostro hosting.

file config.php

	//DATABASE
	$host = "127.0.0.1 o localhost";

	$db_user = "utentemysql";

	$db_psw = "tuapassword";

	$db_name = "database";

file connessione_db.php

Nel file di connessione in primo luogo richiamo il file precedente, per avere le informazioni essenziali ad accedere al db. Dopodichè aggiungo il codice che avete visto nel precedente paragrafo.

<?php 

       include("config.php"); 

        //collegamento
	$col = "mysql:host=$host;dbname=$db_name";

		try {
                  //tentativo di connessione
		  $db = new PDO($col , "$db_user", "$db_psw");
		}
	                //gestione errori
			catch(PDOException $e) {

			  echo 'Attenzione errore: '.$e->getMessage();
			}		

?>

Ricordate che dividere i file in questo modo non è un vezzo grafico ma è una necessità, sopratutto per grandi progetti molto complessi ricordate sempre che l’ordine e il senso logico sono l’arma vincente.

Conclusioni e Link Utili

PDO è sicuramente una vera e propria rivoluzione dedicata a tutto il panorama della programmazione. Maggiore sicurezza,velocità e scalabilità fanno di PDO un compagno di viaggio davvero insostituibile nelle vostre (lunghe) sessioni di sviluppo.

Per maggiori informazioni, come sempre, vi rimando a consultare la reference guide ufficiale a questo indirizzo. Entro breve pubblicherò altri articoli dedicati a questa fantastica interfaccia per approfondire meglio il tema.

    1. Ciao Francesca il file config.php non contiene solo le informazioni per accedere al database ma di solito al suo interno trovi tutte le impostazioni essenziali di un sito. Dividere i due file, oltre a rendere più ordinato il workflow di sviluppo (cosa essenziale in siti medio /grandi) permette di cambiare senza troppi sforzi le info del config.php senza dover toccare altro.

  1. Ciao Riccardo, una domanda.
    sto realizzando una funzione che carica un file config.php con il database in PDO come da te suggerito ma ogni volta che fa semplicemente login perchè deve ricercare la tabella ecc…impiega dagli 8 ai 9 secondi mentre con mysql_db_query ne impiegava al massimo 2…
    è assolutamente improponibile una funzione così lenta per gli utenti del mio sito finale pertanto cosa mi consigli di fare? tornare ai cicli for del msql_db_connect oppure c’è qualcosa di fattibile per pdo??? grazie. di seguito lo script di configurazione che sto usando:

    try {
    $db1 = new PDO(‘mysql:host=mysql.tophost.com,dbname=nomedb;charset=utf8’, $USER1, $PASS1);
    $db1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT);
    } catch(PDOException $e) {
    echo ‘ERROR: ‘ . $e->getMessage();
    }

    tale file viene richiamato con un require_once nei vari header…ma se non erro il require_once lo attiva una sola volta senza ricaricarlo in seguito (quindi dovrebbe velocizzare i processi).

    grazie in anticipo.

  2. Sono arrivato qui da Google, ma non capisco come questa “GUIDA PDO” è organizzata… la guida è composta da solo questo articolo? O manca un link alla parte successiva?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Up Next:

UI-Cloud: migliaia di interfacce UI web gratuite a portata di click

UI-Cloud: migliaia di interfacce UI web gratuite a portata di click