Per colloquiare con MySQL con PHP, ci sono principalmente tre scelte corrispondenti ad altrettante estensioni. 1. estensione nativa per MySQL - presente fin dalla versione 2.0 di PHP mette a disposizione numerose funzioni, ma è stata deprecata a partire da PHP 5.5, e non viene più fornita dal linguaggio dalla versione 7. Consente un approccio alla programmazione di tipo esclusivamente procedurale, non presenta quindi una propria interfaccia per la programmazione ad oggetti. Attualmente questa tecnologia è sconsigliata dalla comunità di PHP per i nuovi progetti, sia per il mancato supporto all’OOP, sia perché non consente di accedere ad alcune tecniche particolarmente utili come le stored procedures (codice scritto in un linguaggio di programmazione supportato dal db). 2. MySQLi - (MySQL improved) disponibile a partire da PHP 5.0, può essere utilizzata sia con un approccio Object Oriented che con un approccio procedurale. Comprende le API (Application Programming Interface) per le prepared statements e le stored procedures, ma anche per query multiple e transazioni. 3. Estensione PHP Data Objects (PDO), completamente orientata agli oggetti, non può essere utilizzata con un approccio procedurale. PDO è una classe che fornisce dei metodi utilizzabili indipendentemente dal DBMS utilizzato. Utilizza un approccio software a due livelli in cui il programmatore usa i metodi forniti da questa classe per interagire al DBMS. Ogni database scrive il suo driver per PDO, cioè scrive un software che traduce i comandi PDO nel linguaggio interno proprio del db scelto. In questo modo il software è completamente slegato dal tipo di db, perché in php scriviamo le istruzioni della classe PDO, indicheremo al programma quale driver utilizzare e sarà poi il driver a tradurre il comando PDO nel comando del db. In questo modo, semplicemente cambiando il nome del driver si cambia il db al quale accedere senza dover cambiare il codice. Se invece utilizziamo msqli e vogliamo cambiare il db al quale accede l’applicazione, dobbiamo individuare la classe preposta all’accesso al nuovo db e sostituire in tutte le pagine le istruzioni di msqli con quelle della nuova classe. Concentriamoci sulla seconda opportunità. Passi da compiere connessione al db msqli procedurale $conn = mysqli_connect('localhost', 'username', 'password', 'nome_database'); or die('Errore in connessione..'. mysqli_connect_errno()); } else { echo 'Connesso. '; Flavia Lollis ITIS A. Volta Trieste 1 di 3 } connessione al db msqli oop $mysqli = new mysqli('localhost', 'username', 'password', 'nome_database'); if ($mysqli->connect_error) { die('Errore di connessione (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } else { echo 'Connesso. ' . $mysqli->host_info . "\n"; } esecuzione insert msqli procedurale $sql ="INSERT INTO corsi (cod, desc, prezzo) VALUES ('a12', 'yoga', 50.00)"; if (mysqli_query($conn, $sql)) { echo "record inserito correttamente"; } else { echo "Errore: ". $sql ."<br>". mysqli_error($conn); } esecuzione insert msqli oop $sql ="INSERT INTO corsi (cod, desc, prezzo) VALUES ('a12', 'yoga', 50.00)"; if (mysqli -> query($sql)) { echo "record inserito correttamente"; } else { echo "Errore: ". $sql ."<br>". mysqli_error($conn); } esecuzione query msqli procedurale $q=”SELECT desc,prezzo FROM corsi”; $result = mysqli_query( $conn, $q) or die('Errore. ' . mysqli_error($conn)); if (mysqli_num_rows($result)>0) { Flavia Lollis ITIS A. Volta Trieste 2 di 3 while($row = mysqli_fetch_assoc($result)) { echo "descrizione: " . $row["desc"]. " - prezzo: " . $row["prezzo"]. " <br>"; } } esecuzione query msqli oop $q=”SELECT desc,prezzo FROM corsi”; $result = $mysqli->query($q); if($result -> num_rows > 0) { while($row = $result->fetch_assoc()) { echo "descrizione: " . $row["desc"]. " - prezzo: " . $row["prezzo"]. " <br>"; } } chiusura connessione procedurale mysqli_close($conn); chiusura connessione oop $msqli -> close(); Flavia Lollis ITIS A. Volta Trieste 3 di 3