PDO – modello transazionale

Il modello transazionale si basa sul concetto che ogni azione che viene eseguita su un database ad esempio insert, delete, o alter avvenga effettivamente.

Si parla perciò di consistenza di database. Non deve mai avvenire che un inserimento od una cancellazione crei una situazione in cui un altro utente legga il dato che in realtà non sia più presente nel database.

In pratica finchè non avviene l’operazione di commit della transazione ossia la conferma dell’operazione nessuno può leggere la tabella. E’ come se mettessimo un blocco esclusivo sulla tabella finchè non decido io quando deve avvenire.

Il primo passo è connettersi al database e settare gli errori:

A questo punto arriva il nucleo del modello transazionale:

Se dovesse andare male l’inserimento il database effettua un rollback ossia si torna indietro. Tutte le istruzioni tra transaction e commit vengono annullate dal rollback.

Ecco il codice sorgente senza ovali di evidenziazione.

Pubblicato in Senza categoria | Lascia un commento

PHP – PDO – Estrazione dei dati da un database -select

SELECT senza condizioni di ricerca

Questa semplice SELECT non ha alcun parametro in ogni caso utilizzo il metodo rowCount che mi fornisce il numero di linee estratte.

SELECT CON condizioni di ricerca

In questo caso devo usare il bindParam per dire il tipo di campo che vado ad estrarre:

ESTRAZIONE DI PIU’ RIGHE CON COMANDO FETCH

In questo caso ho usato il metodo FETCH invece PDO::FETCH_ASSOC ci dice che stiamo creando un array associativo usando come chiavi i nomi dei campi.

ESTRAZIONE DI PIU’ RIGHE CON IL METODO FETCHALL

In questo caso ho impostato l’output in formato JSON oppure posso anche usare il seguente comando:

ho usato il comando foreach molto comodo.

Da un punto di vista tecnico fetchAll è più veloce rispetto al semplice fetch ma consuma un maggiore quantitativo di memoria.

Pubblicato in Senza categoria | Lascia un commento

PHP – PDO – Inserimento – prepare – bind – execute

Per inserire un valore uso le query parametriche con prepare, bind ed execute

FONDAMENTALE queste accortezze: nella query inerire :id, :nome e così via ossia i : e poi il nome della variabile.

Inoltre si ha il controllo del tipo del campo che si andrà ad inserire che come si vede può essere di tipo intero o di tipo stringa con il comando PDO::PARAM_STR che sarà appunto di tipo stringa.

Pubblicato in Senza categoria | Lascia un commento

PHP – PDO – Creazione database e creazione tabelle

Si noti che mi sono collegato al dbms poi ho creato il database. Ho intercettato il messaggio d’errore nel caso in cui la creazione del database non fosse andata a buon fine con il metodo errorCode().

Adesso creo la tabella dopo essermi collegato al database utenti.

sto operando in maniera molto veloce la creazione di una tabella e si nota che non sto specificando che tipo di DBMS sto usando se non , ovviamente in fase si login, ma a differenza dell’altro approccio non uso più metodi o classi caratteristici del mysql.

Pubblicato in Senza categoria | Lascia un commento

PHP – PDO- Connessione

La connessione a un database MySQL si realizza creando un’istanza della classe PDO: il costruttore si aspetta 3 parametri, uno obbligatorio e due facoltativi. Il parametro obbligatorio è il DSN (Data Source Name), i parametri facoltativi, almeno formalmente, sono username e password di accesso al nostro database server.

Possiamo inserire la creazione della connessione al database in un costrutto try-catch in modo da gestire eventuali errori (PDOException) di connessione, bloccare l’esecuzione del codice se la connessione stessa non va a buon fine e visualizzare la tipologia di eccezione individuata .

Si deve chiudere la connessione con il comando:

Posso creare una connessione persistente in maniera tale da migliorare le prestazioni.

Pubblicato in Senza categoria | Lascia un commento

PHP – PDO

PDO, acronimo di PHP Data Object, è un’estensione di PHP introdotta a partire dalla versione 5.1 del linguaggio con lo scopo di unificare le API di accesso ai database.

Come ben sintetizza il suo acronimo, PDO si presenta come una soluzione per sua natura orientata agli oggetti, l’estensione fornisce infatti un’interfaccia comune per la comunicazione con i diversi database.

Uno dei principali punti di forza di PDO risiede nel fatto che esso mette a disposizione delle sviluppatore i prepared statement, costrutti che se utilizzati sistematicamente sono in grado di mettere al riparo gli script delle minacce basate sull’SQL injection, una tecnica di attacco incentrata sull’iniezione di SQL malevolo tramite input al fine di violare le applicazioni per la gestione dati.

In conclusione è possibile sottolineare che i vantaggi derivanti dall’uso di PDO fanno riferimento alle seguenti caratteristiche:

  • Portabilità: grazie al supporto di più engine per la gestione di dati.
  • Programmazione orientata agli oggetti: grazie ad un’interfaccia nativamente object-oriented.
  • Sicurezza: grazie ai prepared statement che proteggono dai tentativi di code injections

Attualmente quando accediamo ad un database tramite PHP abbiamo due opzioni corrispondenti ad altrettante estensioni: PDO oppure MySQLi. Le differenze principali fra le due librerie riguardano i database supportati, la gestione dei parametri e le performance.

La principale differenza tra PDO e MySQLi sta nel numero dei database supportati: mentre MySQLi supporta, come indica il nome stesso, soltanto MySQL, PDO può supportare 12 diversi database.

Preparazione ambiente

  • chiudere apache
  • digitare il file php.ini
  • togiere il ; alla riga extension=pdo_mysql
  • salvare il file php.ini così modificato
  • riaprire il server apache
Pubblicato in Senza categoria | Lascia un commento

PHP – Estrazione di più righe – metodo bind

Inserisco subito il codice:

e vediamo di analizzarla riga per riga.

Definisco la query.

Effettuo il prepare, poi il bind_param è necessario metterlo SOLO e SOLTANTE SE nella query vi è il WHERE altrimenti non serve.

Dopo l’execute devo eseguire il bind_result che prepara il risultato da poi dare alla query.

quindi uso il metodo fetch per estrarre i dati.

Pubblicato in Senza categoria | Lascia un commento

PHP – Delete – bind

Per cancellare un record è sufficiente usare il seguente comando:

Pubblicato in Senza categoria | Lascia un commento

PHP – mysql – update -bind

Si noti come il bind sia ordinato prima sul comando set e poi sul where.

Pubblicato in Senza categoria | Lascia un commento

PHP – Mysql – Inserimenti multipli con bind

quindi eseguo più volte l’inserimento di un record con una sola preparazione SQL. Quindi si vede come usare il bind favorisca anche l’inserimento.

Pubblicato in Senza categoria | Lascia un commento