Indice

Introduzione a PDO

Autore: Fabio Di Matteo
Ultima revisione: 29/01/2011

PDO è una classe php in grado di “pilotare” diversi tipi di database ed è disponibile da php 5.1 in poi. Anche se è comunque installabile sottoforma di estensione PECL anche in php 5.0.
La classe supporta attualmente i seguenti database: Mysql, PostgreSQL, Sqlite, Firebird, IBM Informix Dynamic Server,IBM DB2, Oracle,4D, Cubrid e tutti i database interfacciabili con Odbc. Di seguito una piccola introduzione alla classe con i suoi metodi base prendendo in esame un database Mysql di esempio con una tabella di nome anagrafica come la seguente:

anagrafica

 
id	nominativo	email
1	Fabio Di Matteo	suaemail@gramail.com
2	Chester	        psdasda@libero.it
4	Portatile	portatile@notejbook.it
5	test0	        test0@testo.it

Connessione al database

Con queste istruzioni ci connettiamo alla base di dati e verifichiamo che tutto vada a buon fine.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PDO TEST</title>
</head>
<body>
<strong>Test driver PDO per php - Connessione</strong><br><br><br>
 
<?php
 
 
	try
	{
		//Instaura la connessione
		$dbh = new PDO('mysql:host=localhost;dbname=pdotest', "root", "miapass");
 
		//Chiude la connessione
		$dbh = null;
		echo "Connessione al database riuscita.<br/>";
	}
 
	/* Nel caso in cui ci siano errori durante la connessione, 
	 * li cattura nella variabile $myerror e li stampa */
	catch (PDOException $myerror)
	{
		print "Problemi nella connessione al database: <br>" . $myerror->getMessage() . "<br/>";
	}
 
?>
 
</body>
</html>

Mostriamo il risultato di una select

Generiamo una tabella html con il risultato di una select.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PDO TEST</title>
</head>
<body>
<strong>Test driver PDO per php - Select</strong><br><br><br>
 
<?php
 
	try
	{
		//Instaura la connessione
		$dbh = new PDO('mysql:host=localhost;dbname=pdotest', "root", "miapass");
		echo "Connessione al database riuscita.<br/>";
 
		//Eseguiamo una query (Select)	
		$sql = 'SELECT * FROM anagrafica';
 
		//Preparo le strutture per contenere la query
		$stmt = $dbh->prepare($sql);
 
    	        //Controllo se la query è andata a buon fine
    	        if (! $stmt->execute() ) echo "<b>Errore nella query.</b>";
 
		/* Associo un campo ad una variabile */
    	        $stmt->bindColumn('nominativo', $nominativo);
    	        $stmt->bindColumn('email', $email);
 
		/*Recupero i dati in una tabella*/
		echo '<table border="1">';
		while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
		   echo"<tr><td>". $nominativo . "</td><td>" . $email . "</td></tr>" ;
		}
		echo '</table>' ; 
 
 
		//Chiude la connessione
		$dbh = null;
	}
	//Nel caso in cui ci siano errori, li cattura nella variabile $myerror e li stampa 
	catch (PDOException $myerror)
	{
		print "Problemi nella connessione al database: <br>" . $myerror->getMessage() . "<br/>";
	}
 
 
 
 
 
 
 
?>
 
</body>
</html>

Inseriamo dei record tramite una insert

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PDO TEST</title>
</head>
<body>
<strong>Test driver PDO per php - Insert</strong><br><br><br>
 
<?php
 
	try
	{
		//Instaura la connessione
		$dbh = new PDO('mysql:host=localhost;dbname=pdotest', "root", "miapass");
		echo "Connessione al database riuscita.<br/>";
 
		//Eseguiamo una query (Select)	
		$sql = "INSERT INTO  `anagrafica` (
						`nominativo` ,
						`email`
						)VALUES (
						  'test0', 
						  'test0@testo.it'
				);";
 
		//Preparo le strutture per contenere la query
		$stmt = $dbh->prepare($sql);
 
    	       //Controllo se la query è andata a buon fine
    	       if (! $stmt->execute() ) 
    	       {
			echo "<b>Errore nella query.</b>";
		}else{
			echo "<b>Inserimento eseguito con successo.</b>";
		}
 
		//Chiude la connessione
		$dbh = null;
	}
	//Nel caso in cui ci siano errori, li cattura nella variabile $myerror e li stampa 
	catch (PDOException $myerror)
	{
		print "Problemi nella connessione al database: <br>" . $myerror->getMessage() . "<br/>";
	}
 
 
?>
 
</body>
</html>

Modifichiamo i dati inseriti

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PDO TEST</title>
</head>
<body>
<strong>Test driver PDO per php - Update</strong><br><br><br>
 
<?php
 
	try
	{
		//Instaura la connessione
		$dbh = new PDO('mysql:host=localhost;dbname=pdotest', "root", "miapass");
		echo "Connessione al database riuscita.<br/>";
 
		//Eseguiamo una query (Select)	
		$sql = "UPDATE  `anagrafica` SET  `nominativo` =  'test0 (modificato OK)',
				`email` =  'test0@testo.it (modificato OK)' 
				WHERE  `id` =5;";
 
		//Preparo le strutture per contenere la query
		$stmt = $dbh->prepare($sql);
 
    	        //Controllo se la query è andata a buon fine
    	        if (! $stmt->execute() ) 
    	        {
			echo "<b>Errore nella query.</b>";
		}else{
			echo "<b>Modifica eseguita con successo.</b>";
		}
		//Chiude la connessione
		$dbh = null;
	}
	//Nel caso in cui ci siano errori, li cattura nella variabile $myerror e li stampa 
	catch (PDOException $myerror)
	{
		print "Problemi nella connessione al database: <br>" . $myerror->getMessage() . "<br/>";
	}
 
?>
 
</body>
</html>

Cancelliamo un record

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PDO TEST</title>
</head>
<body>
<strong>Test driver PDO per php - Delete</strong><br><br><br>
 
<?php
 
	try
	{
		//Instaura la connessione
		$dbh = new PDO('mysql:host=localhost;dbname=pdotest', "root", "miapass");
		echo "Connessione al database riuscita.<br/>";
 
		//Eseguiamo una query (Select)	
		$sql = "DELETE  from `anagrafica` WHERE  `id` =2;";
 
		//Preparo le strutture per contenere la query
		$stmt = $dbh->prepare($sql);
 
    	        //Controllo se la query è andata a buon fine
    	        if (! $stmt->execute() ) 
    	        {
			echo "<b>Errore nella query.</b>";
		}else{
			echo "<b>Record cancellato con successo.</b>";
		}
		//Chiude la connessione
		$dbh = null;
	}
	//Nel caso in cui ci siano errori, li cattura nella variabile $myerror e li stampa 
	catch (PDOException $myerror)
	{
		print "Problemi nella connessione al database: <br>" . $myerror->getMessage() . "<br/>";
	}
 
 
 
 
 
 
 
?>
 
</body>
</html>