• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Come effettuare una connessione a MYSQL tramite PHP utilizzando l'estensione mysqli, o PDO, o l'approccio deprecato delle mysql functions

di :: 13 aprile 2021
Come effettuare una connessione a MYSQL tramite PHP utilizzando l'estensione mysqli, o PDO, o l'approccio deprecato delle mysql functions

Per accedere ai dati di un database MySQL dobbiamo, come prima attività, stabilire una connessione tra PHP e MySQL.

In PHP esistono tre diverse possibilità per interagire con MySQL.

  1. La prima consente nell'utilizzo delle "mysql functions", utilizzando una programmazione di tipo esclusivamente procedurale: è un approccio presente dalla versione 2.0 di PHP ma è stato deprecato a partire da PHP 5.5, e non viene più supportato dalla versione 7.
  2. La seconda possibilità è l’impiego dell’estensione MySQLi, che può essere programmata tramite un approccio ad oggetti (OOP) ma anche procedurale. Consente l'utilizzo delle utilissime prepared statements (per prevenire le SQL injection) e stored procedures, delle query multiple e delle transazioni.
  3. La terza possibilità è data dal ricorso all’estensione PDO (PHP Data Objects), esclusivamente orientata agli oggetti (OOP), e che non può quindi essere utilizzata con un approccio procedurale.
    La principale differenza rispetto a MySQLi, è che PDO dispone di driver per diversi database, non limitandosi esclusivamente a MySQL, come ad esempio SQL Server, Oracle, ODBC, PostgreSQL, SQLite, e per questo è molto utilizzata da noti framework come Zend, Laravel e Symfony.

Ci soffermeremo sulla seconda e terza modalità di connessione, dato che la prima è deprecata in quanto non più inclusa a partire da PHP 7.

L'estensione Mysqli: approccio procedurale e ad oggetti

Mysqli è l'acronimo di "MySQL Improved".

Il suo utilizzo è molto semplice ed è possibile seguire sia un approccio procedurale che ad oggetti.

Iniziamo con un approccio procedurale, e vediamo subito un esempio.

Vogliamo collegarci ad un database chiamato "test":

  • creiamo una variabile chiamata "$db" il cui valore è "test"
  • questo database è localizzato sullo stesso server su cui si trova la nostra pagina web php , cioè "localhost" (ma nulla vieta che sia su un altro server, nel qual caso andrei ad indicarne l'ip): creiamo la variabile "$db_host" con valore "localhost"
  • l'utente che può accedere al database è l'utente "root": creiamo la variabile "$db_user" con valore "root"
  • l'utente "root" ha password "miapassword": creiamo la variabile "$db_pwd" con valore "miapassword"

Con questa premessa creiamo un file "db.php" ed inseriamo il codice sottostante, dove è già presente la connessione al database "test", ed una query select.

<?php

$db ="test";
$db_host = "localhost";
$db_user = "root";
$db_password = "miapassword";
$db_connection= mysqli_connect($db_host,$db_user,$db_password);
if (!$db_connection) 
{
	print "si è verificato un problema tecnico";
	exit;
}
mysqli_select_db($db_connection,$db);

?>

Tramite la funzione "mysqli_connect", passando i parametri relativi all'host, allo user e alla pwd dell'utente, ci colleghiamo al database. La connessione ottenuta la inseriamo nella variabile "$db_connection"

Verifichiamo, tramite la condizione "if" se la connessione ha avuto successo, in caso contrario a video presentiamo la frase "si è verificato un problema tenico" e blocchiamo lo script.

Se la connessione ha avuto successo, seleziono il databse "test" tramite la funzione "mysqli_select_db" che ha come argomenti la connessione "$db_connection" e il nome del database "$db"

Fatto questo, posso effettuare le query.

Creiamo un file "index.php", che include il file precedente, ed eseguiamo una select per estrarre i record di una tabella "prova" presente nel nostro database.

<?php

include "db.php";

$query="SELECT prova_id,prova_nome FROM prova";
$result = mysqli_query($db_connection,$query);
if(!$result){
	$err=mysqli_error($mysql_link);
	die("si è verificato il seguente problema tecnico": $err);
}
$rows = mysqli_num_rows($result);
echo "Sono presenti ".$rows." records<br />";

if($rows>0){
   while ($row = mysqli_fetch_assoc($result)){
	echo "ID: $row[prova_id], Nome: $row[prova_nome]<br />";
   }
}
mysqli_close($db_connection);
?>

La query eseguita è banale, per cui non mi dilungo sulla sua spiegazione.

Adesso vediamo lo stesso esempio utilizzando un approccio ad oggetti.

Nel nostro file "db.php", sostituiamo la connessione con la creazione di un "oggetto di classe mysqli", cioè una istanza di quella classe, che richiede 4 argomenti, come possiamo vedere nel codice sottostante:

<?php

$db ="test";
$db_host = "localhost";
$db_user = "root";
$db_password = "miapassword";

$db_connection = new mysqli($db_host, $db_user, $db_password, $db);
if ($db_connection->connect_error) {
    die("Si è verificato il seguente problema tecnico: " . $db_connection->connect_error);
} 

?>

Nel file "index.php" includiamo il file che esegue la connessione, ed effettuiamo la select:

<?php

include "db.php";

$result = $db_connection->query("SELECT prova_id,prova_nome FROM prova");
$rows=$result->num_rows;

echo "Sono presenti $rows records<br />";

if($rows>0){
   while($row = $result->fetch_assoc()) {
	echo "ID: $row[prova_id], Nome: $row[prova_nome]<br />";
   }
}

$result->close();
$conn->close();
?>

Il risultato è il medesimo dell'approccio procedurale.

Da notare che questa connessione necessita la libreria "php-mysql" installata.

L'estensione PDO: approccio ad oggetti

L'utilizzo di questo approggio necessita la libreria "php-pdo" installata.

Come già accennato, l'approccio in questo caso è esclusivamente ad oggetti.

Inziamo con la connessione al database. Creiamo un file "db.php" e dentro inseriamo questo codice.

<?php

$db ="test";
$db_host = "localhost";
$db_user = "root";
$db_password = "miapassword";

try {
    $db_connection = new PDO("mysql:host=$db_host;dbname=$db", $db_user, $db_password);
    echo "Connessione al db avvenuta<br />";
}

catch(PDOException $err) {
    echo "Si è verificato un problema tecnico: ".$err->getMessage();
    exit;
}
?>

Come potete vedere ho utilizzato un costrutto try-catch in modo da gestire eventuali errori di connessione (PDOException): in presenza di errori blocchiamo l’esecuzione dello script e visualizziamo la tipologia di errore.

Creiamo adesso un file "index.php" in cui includiamo il file di connessione, ed eseguiamo la solita query select.

<?php

include "db.php";

$result = $db_connection->query("SELECT prova_id,prova_nome FROM prova");
$rows= $result–>rowCount();

echo "Sono presenti $rows records<br />";

if($rows>0){
   while($row = $result->fetch(PDO::FETCH_ASSOC)) {
	echo "ID: $row[prova_id], Nome: $row[prova_nome]<br />";
   }
}

//chiusura connessione
$result = null;
$db_connection = null;
?>

In questo articolo ho spiegato "solo" come effettuare una connessione a MySQL. Prossimamente approfondiremo l'esecuzione di query utilizzando i due approcci visti.

Stay tuned!

<?php

$db ="test";
$db_host = "localhost";
$db_user = "root";
$db_password = "miapassword";

$db_connection = new mysqli($db_host, $db_user, $db_password, $db);
if ($db_connection->connect_error) {
    die("Si è verificato il seguente problema tecnico: " . $db_connection->connect_error);
} 

?>
 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE