Brevi segnalazioni prima di procedere
- nel corso di questa trattazione, le funzioni PHP non verranno precedute dall'operatore di silence (
@
), per permettere la visualizzazione di eventuali errori in sede di sviluppo; si raccomanda invece di utilizzare sempre l'operatore di silence in fase di produzione; - tutto il codice utilizzato per questa guida può essere scaricato ed utilizzato liberamente;
- le versioni dei server utilizzate nella guida sono le seguenti: PHP versione 5.2.10, MySQL versione 4.1.22-standard, Apache versione 2.2.11 (Linux).
Connessione PHP MySQL
Perché un'applicazione realizzata in PHP possa utilizzare le informazioni contenute all'interno di un database questa deve poter avere accesso ad esse, a questo scopo l'applicazione dovrà poter comunicare con l'RDBMS che gestisce la base di dati, ciò è possibile attraverso un procedura iniziale e necessaria chiamata "connessione"; per evitare ambiguità è bene chiarire che la procedura di connessione avviene tra lo script e il programma che gestisce la base di dati e non tra lo script e la base di dati stessa; una volta terminata la procedura necessaria per la connessione all'RDBMS, sarà possibile avviarne una seconda chiamata di "selezione" del database da utilizzare.
Parametri di connessione
Per aprire una connessione da un'applicazione in PHP al database manager MySQL, si utilizza una funzione nativa del linguaggio chiamata mysql_connect()
, essa restituisce un identificativo di connessione MySQL in caso di successo, diversamente restituisce FALSE;
questa funzione richiede il passaggio di tre parametri che sono argomenti della funzione:
- hostname: è il nome dell'host (o macchina ospitante) relativa al database manager MySQL a cui si desidera effettuare una connessione, esso identifica univocamente una postazione in Rete e può essere espresso sotto forma di indirizzo IP o stringa eventualmente seguita dal numero della porta attraverso cui l'RDMS attende le chiamate da parte dei client (i computer degli utenti che intendono interrogare i database), nel caso di un'installazione locale l'hostname è generalmente chimato "localhost";
- username: è il nome dell'utente abilitato alla connessione e alla manipolazione di uno o più database; MySQL prevede un utente iniziale che è quello di root a cui sono associati i privilegi per la manipolazione delle basi di dati gestite, l'utilizzatore potrà poi creare altri utenti a cui associare un username e privilegi comparabili o inferiori a quelli previsti per il root;
- password: per questioni di sicurezza è buona norma associare una password ad ogni nuovo utente MySQL creato, questa permetterà di autenticarlo al momento della connessione con il Database manager.
I tre parametri da passare a mysql_connect()
possono essere espressi sia sotto forma di variabili che sotto forma di valori puri, l'ordine da rispettare è quello proposto in elenco, per cui sarà possibile utilizzare sia una forma del genere:
// hostname
$nomehost = "localhost";
// utente per la connessione a MySQL
$nomeuser = "username";
// password per l'autenticazione dell'utente
$password = "password";
// connessione tramite mysql_connect()
$connessione = mysql_connect($host,$user,$pass);
che la forma seguente
// connessione a MySQL tramite mysql_connect()
$connessione = mysql_connect("localhost","username","password");
Un buon metodo per permettere ad un'applicazione realizzata in PHP di connettersi a MySQL è quello di utilizzare una classe:
<?php
class MysqlClass
{
// parametri per la connessione al database
private $nomehost = "localhost";
private $nomeuser = "username";
private $password = "password";
// controllo sulle connessioni attive
private $attiva = false;
// funzione per la connessione a MySQL
public function connetti()
{
if(!$this->attiva)
{
$connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password);
}else{
return true;
}
}
}
?>
Programmazione a oggetti
Per quanto la programmazione per oggetti possa presentare qualche complessità in più rispetto a quella che segue il paradigma procedurale, il meccanismo utilizzato dalla classe appena proposta risulta abbastanza semplice:
- i parametri per la connessione al DBMS vengono associati al modificatore "private" che li renderà disponibili soltanto all'interno della classe di appartenenza, secondo le regole di visibilità introdotte dal paradigma OOP nelle ultime versioni di PHP;
- viene effettuato un controllo sull'eventuale esistenza di connessioni attive;
- viene definita una funzione personalizzata (denominata
connetti()
) che potrà essere richiamata nel caso si voglia stabilire una connessione a MySQL; in questo caso alla funzione viene associato il modificatore public, ciò vuol dire che gli attributi e i metodi di cui sono dotati gli oggetti ad essa relativi saranno accessibili anche esternamente alla classe; - nel caso in cui non sia già attiva alcuna connessione, i parametri necessari ad essa verranno passati alla funzione primitiva
mysql_connect()
che si occuperà di stabilirla, diversamente la richiesta di accesso al DBMS non verrà inviata.
Questa classe, che verrà implementata con nuove funzionalità nel corso della trattazione, potrà essere salvata in un file chiamato ad esempio funzioni_mysql.php (o se si preferisce il classico config.php); essa potrà essere richiamata in qualsiasi momento da qualsiasi file con una semplice inclusione; perché la classe possa essere utilizzata dovrà essere istanziata, nello stesso modo sarà possibile utilizzare la funzione per la connessione a MySQL tramite una semplice chiamata:
// inclusione del file contenente la classe
include "funzioni_mysql.php"
// istanza della classe
$data = new MysqlClass();
// chiamata alla funzione di connessione
$data->connetti();