PDO - prepared statements

In pratica, si tratta di riscrivere la pagina php che abbiamo fatto qui, utilizzando le funzionalità per i prepared statements di PDO dove avevamo usato quelle per mysqli.

Niente di particolare da dire sulla fase di inizializzazione:
if(($dbh = dbo_connect()) == false)
die();
pdo_list_products($dbh);
Più interessante la fase di preparazione della query, perché con PDO é possibile utilizzare parametri identificati da nomi, che rendono più leggibile il codice (dove i punti di domanda utilizzati alternativamente lo rendono più oscuro):
$query = "SELECT sku, name, price FROM products WHERE price < :low";
$stmt = $dbh->prepare($query);
Ora instauriamo un legame tra un variabile PHP e il parametro definito nella query, usando la funzione bindParam() dello statement PDO.

E quindi, per verificare la funzionalità, facciamo un loop for per l'appunto sulla variabile usata.

Eseguiamo lo statement (al primo giro nel loop $low conterrà il valore 2, e via via verrà incrementato) con execute().

Dopo aver fatto l'execute(), possiamo in tutta sicurezza collegare i valori in output dalla nostra select con variabili locali a PHP. In teoria dovrebbe essere possibile farlo anche prima, ma si tratta di un comportamento dipendente dal database sottostante.

Facciamo una rowCount() per verificare che vi sia almeno un articolo nel nostro resultset, se sì, leggiamo con una serie di fetch() tutte le righe disponibili e le visualizziamo sfruttando il binding che abbiamo fatto alle variabili PHP.

Nota che chiamiamo la fetch() con il parametro PDO::FETCH_BOUND, in modo da farle sapere che vogliamo usare le variabili collegate.
$stmt->bindParam(':low', $low);
for($low = 2; $low < 6; ++$low)
{
$stmt->execute();
$stmt->bindColumn(1, $sku);
$stmt->bindColumn(2, $name);
$stmt->bindColumn(3, $price);

if(($stmt->rowCount()) == 0)
{
echo "<br/>No item with a price less than $low €<br/>";
continue;
}

echo "<br/>Items with a price less than $low €:<br/>";
while($row = $stmt->fetch(PDO::FETCH_BOUND))
echo "($sku) $name: €$price<br/>;
}
Qui si può vedere il codice sopra descritto in azione.

Nessun commento:

Posta un commento