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