prepare

Mattepuffo's logo
Eseguire query multiple in PHP e PDO

Eseguire query multiple in PHP e PDO

Supponiamo di dover eseguire due query diverse consecutivamente; a esempio due update del genere:

UPDATE persone SET abilitato = 0;
UPDATE persone SET abilitato = 1 WHERE id = 3;

Come vedete sono due istruzioni diverse, quindi non parliamo della stessa istruzione ripertuta con valori diversi.

Mattepuffo's logo
Usare la clausola IN in una Stored Procedure in MySQL

Usare la clausola IN in una Stored Procedure in MySQL

La clausola IN, in una query con vari filtri, può essere molto comoda.

Ma se la vogliamo usare dentro una Stored Procedure in MySQL, può essere problematico passare i valori da usare nella clausola.

Per farlo siamo costretti a concatenare la query usando CONCAT.

Mattepuffo's logo
Passare il nome del campo o della tabella alle Stored Procedure in MySQL

Passare il nome del campo o della tabella alle Stored Procedure in MySQL

Mi è capitato spesso di avere delle Stored Procedure molto simili tra loro, dove la differenza era, ad esempio, solo il campo o la tabella da interrogare.

In questi casi la cosa migliore sarebbe passare il nome del campo / tabella alla SP come parametro.

Solo che poi non lo si può usare come un "normale" parametro.

Specifico che siamo in ambito MySQL, anche se forse vale la stessa cosa per altri db.

Mattepuffo's logo
Prepared Statement con MySQLi

Prepared Statement con MySQLi

Anche se in genere uso PDO per connettermi a MySQL con PHP, per piccoli script può non valerne la pena.

Ma al posto di usare le classiche funzionu mysql_ ho iniziato a usare il mysqli, che ad oggi è strettamente consigliato.

Vediamo qui come eseguire istruzioni preparate (Pepared Statement) per inserire da in un db MySQL attraverso l'estensione MySQLi.

Vi posto il form:

<form action="" method="post">
<label>Nome / Name:</label>
<input type="text" value="" name="nome" />
<label>Cognome / Surname:</label>
<input type="text" value="" name="cognome" />
<fieldset>
<legend>Sex:</legend>
<input type="radio" name="sex" value="m" />
<label>M</label>
<input type="radio" name="sex" value="f" checked="checked"  />
<label>F</label>
</fieldset>
<label>E-mail:</label>
<input type="text" value="" name="email" />
<label>Nazione / Country:</label>
<select name="nazione">
<option>Italy</option>
<option>UK</option>
</select>
<label>Lingua / Language:</label>
<select name="lingua">
<option>*</option>
<option>Italiano</option>
<option>English</option>
</select>
<fieldset>
<legend>Privacy:</legend>
<input type="checkbox" name="privacy" />
<label>Agree</label>
</fieldset>
<fieldset>
<button type="submit" name="btn_send">Submit</button>
</fieldset>
</form>

Un normale form.

Mattepuffo's logo
Modifica dati con PDO

Modifica dati con PDO

Dopo aver visto come effettuare una interrogazione e l'inserimento vediamo come modificare i dati sul nostro db MySQL.

Vi consiglio prima una letta a quei due articoli.....

Prima di tutto aggiungiamo una funzione alla nostra classe:

public function update($nome, $cognome, $data_nascita, $cel, $tel, $fax, $soc, $carica, $email1, $email2, $sito, $casa, $uff, $id) {
$prepare = $this->pdo->prepare("UPDATE contatti SET nome=?, cognome=?, data_nascita=?, cellulare=?, telefono=?, fax=?, societa=?, carica=?, email_1=?, email_2=?, sito_web=?, indirizzo_casa=?, indirizzo_uff=? WHERE id=?");
$prepare->execute(array(
trim($nome),
trim($cognome),
trim($data_nascita),
trim($cel),
trim($tel),
trim($fax),
trim($soc),
trim($carica),
trim($email1),
trim($email2),
trim($sito),
trim($casa),
trim($uff),
$id
));
header('location:index.php');
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}

Anche qui abbiamo usato un'istruzione prepare come nel caso dell'inserimento.

Mattepuffo's logo
Inserimento dati con PDO

Inserimento dati con PDO

Dovo avere fatto la connessione e una classica interrogazione vediamo come aggiungere dati al nostro db.

Prima di tutto leggiamo l'articolo linkato e salviamoci quella classe.

Infatti non andremo creare una nuova classe, ma aggiungeremo solo una funzione riprendendo quella istanza di PDO.

Questo perchè, come detto nell'articolo, quella classe rappresenta il nostro db e li mettermo tutte le operazioni da fare.

Per l'inserimento useremo le istruzioni prepare.

Come vedete queste istruzioni posso essere usate in vari modi; io in genere uso i segnaposti ?.

Vediamo la funzione da aggiungere alla classe:

public function insert($nome, $cognome, $data_nascita, $cel, $tel, $fax, $soc, $carica, $email1, $email2, $sito, $casa, $uff) {
try {
$prepare = $this->pdo->prepare("INSERT INTO contatti (nome, cognome, data_nascita, cellulare, telefono, fax, societa, carica, email_1, email_2, sito_web, indirizzo_casa, indirizzo_uff) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
$prepare->execute(array(
trim($nome),
trim($cognome),
trim($data_nascita),
trim($cel),
trim($tel),
trim($fax),
trim($soc),
trim($carica),
trim($email1),
trim($email2),
trim($sito),
trim($casa),
trim($uff)
));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}

Come vedete la funzione richiede diversi parametri, che corrispondono alle voci da inserire nella tabella.