Seguici su Telegram, ne vale la pena ❤️ ➡ @trovalost
Vai al contenuto

PHP: come connettersi al database mediante PDO

Connettersi al database è necessario per la maggioranza degli script e dei siti web al fine di poter accedere a funzionalità  di ogni genere: log di dati, proprietà  del sito, memorizzazione di hash di sistema ed impostazioni, spesso e volentieri memorizzazione di dati dinamici del sito come contenuti delle pagine, degli articoli e dei widget. PDO (PHP Data Objects) è, in questo, una delle tecnologie più in voga per la sua modernità  e rapidità  (vedi anche qui, sul sito ufficiale).

Introduzione


Cerchi un hosting economico per il tuo sito o blog? Tophost ti aspetta (clicca qui) - Puoi anche usare il coupon sconto esclusivo 7NSS5HAGD5UC2 per spendere di meno ;-)

Devo riconoscere che fino a qualche anno fa utilizzavo il metodo di connessione tradizionale di PHP, ovvero quello basato sulla connessione ed invio/ricezione dei dati mediante la primitiva mysql: questo metodo, a quanto leggo in fase di esecuzione di un po’ di codice test, sembra che sarà  presto addirittura deprecato, per essere quindi abbandonato definitivamente nel giro dei prossimi anni. In questo caso PDO sembra essere la risposta concreta da dare alle nostre necessità : una classe più snella e più veloce per connettersi, in lettura ed in scrittura e con supporto alle transazioni, al nostro db MySQL da PHP.

Un modello base di codice per PDO

In questo articolo vorrei quindi “prendere nota” con voi di un codice minimale che potete riutilizzare nei vostri progetti: io sto cercando di mettere in piedi una classe più semplice possibile che poi, almeno nelle mie intenzioni, dovrebbe finire nella mia pagina GitHub. Nel frattempo vi propongo in anteprima come si ci possa connettere ad un db mediante PHP e PDO, fermo restando che questo particolare modulo è supportato da PHP versione 5.1 in poi (la maggioranza degli hosting condivisi con database in commercio dovrebbe supportarlo, ma i test – è bene ricordare – è decisamente consigliabile farli sul proprio computer in ambiente MAMP o WAMP).

Partiamo dalla creazione dell’oggetto db, che sarà  una variabile istanzata a runtime mediante questa scrittura (che qui immagino essere già  all’interno della classe TheDatabase:

$this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database.';charset='.$this->charset.'', $this->username,$this->password );

In pratica stiamo passando cinque parametri alla funzione PDO anzichè i tradizionali quattro, ovvero database, nome utente, password, host e – in aggiunta – il charset che in questo caso potrebbe essere UTF-8. I valori delle variabili saranno memorizzati, per semplicità , direttamente nel codice PHP, anche se questo non è il massimo perchè chiunque si colleghi al nostro FTP potrebbe leggerle in chiaro: esistono metodi più efficenti per gestire questa cosa ma, per il momento, ci limitiamo a salvare come variabili private (in chiaro) le informazioni che ci servono, tanto più che ci troviamo in locale.

Esempio pratico di PDO: una SELECT MySQL

Cosa resta da fare? Molto poco, in verità : questa porzione di codice non fa altro che eseguire una query di SELECT di base, ad esempio:

$query = "SELECT * FROM mytable123";
$this->stmt = $this->db->query( $query );
while($row = $this->stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<tr><td>".$row['legalname'].'</td><td> '.$row['city']."</td></tr>"; //etc...
}

Noi in pratica passiamo la query come variabile stringa e, semplicemente, la stiamo passando alla funzione query del database che abbiamo creato ($this->db, che sarà  un’altra variabile private, per quel che ci riguarda). Per passare dei parametri alla query di SELECT si fa cosà¬:

$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->bindValue(2, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

ovvero si mettono dei caratteri ? “jolly” e poi si legano a runtime mediante un binding dinamico.

Esempio di INSERT e DELETE

Inoltre, di fatto, per una query in scrittura (INSERT/UPDATE) facciamo cosà¬:

//INSERT
$stmt = $db->prepare("INSERT INTO table(field1,field2,field3,field4,field5) VALUES(:field1,:field2,:field3,:field4,:field5)");
$stmt->execute(array(':field1' => $field1, ':field2' => $field2, ':field3' => $field3, ':field4' => $field4, ':field5' => $field5));
$affected_rows = $stmt->rowCount();
//DELETE
$stmt = $db->prepare("DELETE FROM table WHERE id=:id");
$stmt->bindValue(':id', $id, PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount();
//UPDATE
$stmt = $db->prepare("UPDATE table SET name=? WHERE id=?");
$stmt->execute(array($name, $id));
$affected_rows = $stmt->rowCount();

Ovviamente il discorso non finirebbe qui ma, per il momento, preferisco soffermarmi su qeusti semplici concetti base: ci sono dei discorsi da fare relativi alla sicurezza ed alla maggiore efficenza di questo metodo di connessione per l’estrazione dati ma, per il momento, preferisco rinviare il tutto alla prossima occasione. Questi frammenti di codice possono esservi molto utili, all’occorrenza, per realizzare una classe minimale di connessione a PHP quanto più possibile parametrica anche se, da quel che ho visto, non è possibile mettere come parametri i nomi delle tabelle.

Photo by CalEvans

👇 Da non perdere 👇



Questo portale web esiste da 4461 giorni (12 anni), e contiene ad oggi 6543 articoli (circa 5.234.400 parole in tutto) e 12 servizi online gratuiti. – Leggi un altro articolo a caso
Non ha ancora votato nessuno.

Ti sembra utile o interessante? Vota e fammelo sapere.

Questo sito contribuisce alla audience di sè stesso.
Il nostro network informativo: Lipercubo.it - Pagare.online - Trovalost.it.