Author Avatar

Fabrizio S.

0

Share post:

PHP e i database Relazionali di MYSQL

 

SI parla da molti anni anni dei database relazionali, ma di preciso cosa è ? Di cosa si tratta? Ebbene nonostante tutto ad oggi non esiste una definizione standard o una esaustiva dei Data Base Relazionali. Di sicuro un database non puo’ essere definito relazione solamente perché al suo interno presenta delle tabelle. Se visto da un matematico un database Relazionale è un insieme formato da elementi che sono distinti fra loro, dove ciascun elemento rappresenta un n-ulpa dove ciascuna delle n componenti dell’elemento è presa da un determinato dominio., questo da un punto di vista matematico che poi ovviamente andrebbe rivisto in chiave database.

 

Diciamo che un database relazionale, detto in maniera molto grossolana, è un insieme di Script, nel nostro caso PHP, che permette di collegare insieme tabelle di un database con relazioni di tipo molti a uno, uno a molti e molti a molti.

 

Ci rendiamo conto che al momento è ancora una dichiarazione un po’ fumosa, ma vedremo passo passo come sia relativamente semplice il tutto.

 

Cominciamo adesso a porci la domanda fondamentale perché creare un database relazionale, molto semplicemente perché se accumolassismo tutti i dati all’interno di un solo Database andremo incontro a due problemi fondamentali. Il primo di avere dei Database di proporzioni sconfinate e quindi un inutile accumolo di memorai persa. Con i relazionali non c’e’ bisogno ad esempio di ripetere gli stessi dati, pensate a un’agenda con vari indirizzi email, per ogni indirizzo email saremmo costretti a scrivere un nuovo record mentre con i relazionali tutto questo viene fatto con l’utilizzo di indici. Inoltre se non li utilizzassimo avremmo bisogno possibilmente di scrivere degli script dopo che abbiamo effettuato le nostre query per prelevare i dati che ci interessano.

Ricorriamo per spiegarveli nel migliore dei modi a degli esempi che per primo ha introdotto Kevin Yank che poi è il grande padre putativo del PHP e che ha spiegato al meglio in un suo libro in inglese il funzionamento dei Database Relazionali.

 

Quindi ipotizziamo di avere due database uno lo chiamiamo Joke ossia barzellette e l’altro lo chiamiamo author ossia autori. Fatti nel seguente modo

Come potete vedere dall’area del grafico abbiamo creato una corrispondenza diretta  fra l’id degli autori authorid e  il campo id del database autore.

Se ci trovassimo in queste condizioni , senza la possibilità di utilizzare i database relazionali ci troveremo nella sgradita situazione di dovere fare due query la prima per il database Joke , la seconda per il database author e dopo aggiungere del codice in modo da fare con php una join. Guardate invece come sia molto piu’ semplice  con questo semplice script

 

 

 

 

 

$jokelist = @mysql_query (‘SELECT joketext, name, email

FROM joke, author WHERE authorid=author.id’);

if (!$jokelist) {

echo ‘<br> sopraggiunto errore <br>’.mysql_error();

}

while ($row = mysql_fetch_array($jokelist)) {

$joketext= $joke[‘joketext’];

$name=$joke[‘name’];

$email = $joke[‘email’];

}

 

Ora che abbiamo un attimo in mente che cosa sono I database relazionali vediamo di capire meglio le relazioni che possono interecorrere.  Partiamo dalle relazioni uno a uno, ossia quelle fatte con una singola tabella prima che utilizzassimo i db relazionali. Prendiamo adesso in esame quelle che sono invece le relazioni uno a molti  ossia ad un elemento di una tabella potrebbero corrispondere molti elementi di altre tabelle. Voi non lo sapete ma se ci pensate un attimo lo avrete già rivisto, ossia si tratta del precedente esempio grafico. Cerchiamo osa di capire come sia possibile estrarre l’email di Kevin Jank nel seguente modo

 

SELECT email FROM author, email WHERE

Name=”Kevin Yank” AND authored=author.id;

 

E visualizzeremo il valore kevin@sitepoint.com  , vi facciamo pero’ anche notare che Kevin potrebbe avere anche alter email è questo il vero punto di forza dei relazionali, ossia con questa semplice query potrete visualizzare tutti I relazionali in questione.

E queste sono le relazioni uno a molti, in modo analogo ma al contrario sono le relazioni molti a uno. Le vedremo anche loro ma le vedremo all’interno delle relazioni molti a molti. Partiamo da un esempio pratico per capire meglio di cosa si tratti.

Importante quando si lavora con i database redazionali creare il doppio indice primario ossia

Jokeid categoryid

 

In questo caso devono essere primary  key in quanto una insieme all’altra devono fornire valori univoci.

Facciamo adesso qualche caso specifico. La seguente  Query di ricerca esplicita  tutte le barzellette che appartentono alla categoria Knock knock.

 

SELECT joletext

FROM joke, category, jokecategory

WHERE name= “Knock-knock” AND jokeid=joke.id;

 

Mentre la query seguente mostra un elenco delle categorie che contengono barzellette che iniziano con how many lawyers

SELECT name

FROM joke, category,  jokecategory

WHERE joketext LIKE “How many lawyers%”

AND  categoryid = category.id AND jokeid= joke.id;

 

 

HTMLSPECIALCHARS E MAGIC QUOTE

 

Fra che ci siamo vi parliamo anche di queste due funzioni che sono molto utili quando abbiamo a che fare con I dati che vengono inseriti nei database  e che sono appunto htmlspecialchars e magicquote.. La prima ossia htmlspecialchars converte i caratteri speciali di HTML come <,> e le virgolette, nei loro codici corrispettivi di carattere. Considerate il seguente esempio.

$testo = htmlspecialchars(‘<HTML> can be dangerous’ );

echo $testo //output :&lt;HTML&gt; ca be dangerous!

Questa funzione è particolarmente utilizzata quando vengono prelevati dei dati dal database che poi vengono mandate a video.,

Molto interessante è anche la funzione magic quote che si inquadra in questo contesto. Prendiamo in considerazione il seguente esempio

 

INSERT INTO agenda SET

name =’d’agostino’;

 

Ovviamente la presenza in contemporanea dell’apice  davanti ad agostino comprta che il php non è in grado di eseguire la query. Per ovviamente a questo problema si inserisce l’addslashes che consente di fare interpretare al compilatore correttamente il codice. Insomma legge come se quell’apice fosse un apice del linguaggio e non un simbolo.

 

 

INSERT INTO agenda SET

name =’d\’agostino’;

 

generalmente nei server moderni questa opzione è già attiva di default , ma talune volte viene disattivata per svariati motivi, per arrivarla di default in ogni modo non dovrete fare altro che andare nel vostro  php.ini e settare magic quote ad On nel seguente modo

 

 

magic_quotes_gpc = On

 

Ed il gioco è fatto.

 

Database MYSQL integrazione con PHP, script e connessioni.
Formattazione testo PHP ereg_replace, preg_match(), str_replace, preg_match_all