2009-09-21 5 views
30

Oggi mi è stato detto che dovrei davvero usare PDO e istruzioni preparate nella mia applicazione. Mentre capisco i vantaggi, sto cercando di capire come li implemento nel mio flusso di lavoro. A parte il fatto che rende il codice molto più pulito, dovrei avere una specifica classe di database che contiene tutte le mie istruzioni preparate o dovrei crearne una ogni volta che voglio eseguire una query? Sto trovando molto difficile capire quando dovrei usare una query PDO standard e quando dovrei usare una dichiarazione preparata. Eventuali esempi, suggerimenti o collegamenti tutorial sarebbero molto apprezzati.PHP Istruzioni DOP preparate

risposta

31

Ci sono due grandi esempi sulla documentazione pdo::prepare().

li ho incluso qui e semplificato un po '.

Questo si usa ? parametri. $dbh è fondamentalmente un oggetto PDO. E quello che stai facendo è mettere i valori 150 e 'red' rispettivamente nel primo e secondo punto interrogativo.

/* Execute a prepared statement by passing an array of values */ 
$sth = $dbh->prepare('SELECT name, colour, calories 
         FROM fruit 
         WHERE calories < ? AND colour = ?'); 

$sth->execute(array(150, 'red')); 

$red = $sth->fetchAll(); 

Questo utilizza parametri denominati ed è un po 'più complesso.

/* Execute a prepared statement by passing an array of values */ 
$sql = 'SELECT name, colour, calories 
     FROM fruit 
     WHERE calories < :calories AND colour = :colour'; 

$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$sth->execute(array(':calories' => 150, ':colour' => 'red')); 

$red = $sth->fetchAll(); 
+1

nei 2 esempi, 1 è meglio dell'altro? – JasonDavis

+0

Per domande semplici, il? è ok. Ma nota che le dichiarazioni preparate aggiungeranno una citazione attorno ad ogni valore. In cui al 2 ° esempio, puoi affermare che un valore è un numero e l'altro valore è una stringa. (anche se non è mostrato qui) –

+0

Dipende solo da cosa vuoi fare con esso ... Se vuoi usare lo stesso valore più di una volta, dovresti usare i parametri con nome. Questo perché se usi?, Semplicemente le inserisce nell'ordine in cui appaiono. Se hai usato i parametri con nome, puoi usarli più di una volta. I? Sono solo una versione più condensata per le query più semplici. Uno non ha un vantaggio rispetto all'altro in nessun altro modo. – BraedenP