PDA

View Full Version : [MySQL] - Istruzioni Preparate (che diavolo sono?)


tidusuper91
26-12-2009, 11:51
Salve,
sul manuale ho appena affrontato le istruzioni preparate della classe mysqli del database MySQL. Ma a che servono? Non ne capisco l'utilità e soprattutto l'implementazione. Qualcuno potrebbe chiarirmi le idee?

Auguri!
=)

cdimauro
26-12-2009, 14:04
Non conosco i dettagli di MySQL, ma con gli engine SQL in generale per istruzioni "preparate" s'intendono le istruzioni SQL che sono già state "predigerite", cioè l'engine le ha parserizzate, sa cosa deve fare e quali risorse allocare.

Ciò è importante perché la prossima volta che si deve riusare l'istruzione, non ha bisogno di eseguire nuovamente le stesse operazioni: passa direttamente a eseguire il lavoro richiesto.

tidusuper91
26-12-2009, 14:57
Non conosco i dettagli di MySQL, ma con gli engine SQL in generale per istruzioni "preparate" s'intendono le istruzioni SQL che sono già state "predigerite", cioè l'engine le ha parserizzate, sa cosa deve fare e quali risorse allocare.

Ciò è importante perché la prossima volta che si deve riusare l'istruzione, non ha bisogno di eseguire nuovamente le stesse operazioni: passa direttamente a eseguire il lavoro richiesto.

Capisco... Ma non ho ben capito la loro implementazione nel codice. Potresti farmi un esempio perchè sul manuale non è molto chiaro.

Gracias

cdimauro
26-12-2009, 16:16
Purtroppo, come ti dicevo prima, non conosco questi dettagli di MySQL, e non posso dirti altro. Mi spiace.

tidusuper91
26-12-2009, 20:05
Purtroppo, come ti dicevo prima, non conosco questi dettagli di MySQL, e non posso dirti altro. Mi spiace.

Capisco. fa nulla!

Rikiji
28-12-2009, 08:38
.

CwNd
28-12-2009, 11:24
Capisco... Ma non ho ben capito la loro implementazione nel codice. Potresti farmi un esempio perchè sul manuale non è molto chiaro.


Come ti ha giustamente esplicato cdimauro le "istruzioni preparate" (hai il libro in italiano? è orrenda la traduzione) meglio conosciuti come "prepared statements" sono molto utili quando ad esempio devi eseguire molte volte consecutivamente una query poichè evitano al dbms di doverla compilare ad ogni chiamata, cosa che riduce sia il tempo che il carico del dbms.
Se parli di classe mysqli probabilmente ti riferisci al codice php relativo. Ho trovato questo esempio con una semplice googlata, sembra abbastanza comprensibile:


// Connect to the server and select a database
$dbh = mysqli_connect($hostname,$username,$password,$dbname) or
die("Problem connecting: ".mysqli_error());

// Prepare statement
$sql = 'SELECT field1,field2 FROM tablenames';
// Allocates and initializes a statement object suitable for mysqli_stmt_prepare().
$stmt = mysqli_stmt_init($dbh);
// Prepare statement, bind result variables, execute and place results into bound result variables
if (mysqli_stmt_prepare($stmt, $sql)) {
mysqli_stmt_bind_result($stmt, $field1,$field2);
mysqli_stmt_execute($stmt);
while (mysqli_stmt_fetch($stmt)) {
echo "$field1 : $field2\n";
}

tidusuper91
31-12-2009, 00:45
Come ti ha giustamente esplicato cdimauro le "istruzioni preparate" (hai il libro in italiano? è orrenda la traduzione) meglio conosciuti come "prepared statements" sono molto utili quando ad esempio devi eseguire molte volte consecutivamente una query poichè evitano al dbms di doverla compilare ad ogni chiamata, cosa che riduce sia il tempo che il carico del dbms.
Se parli di classe mysqli probabilmente ti riferisci al codice php relativo. Ho trovato questo esempio con una semplice googlata, sembra abbastanza comprensibile:


// Connect to the server and select a database
$dbh = mysqli_connect($hostname,$username,$password,$dbname) or
die("Problem connecting: ".mysqli_error());

// Prepare statement
$sql = 'SELECT field1,field2 FROM tablenames';
// Allocates and initializes a statement object suitable for mysqli_stmt_prepare().
$stmt = mysqli_stmt_init($dbh);
// Prepare statement, bind result variables, execute and place results into bound result variables
if (mysqli_stmt_prepare($stmt, $sql)) {
mysqli_stmt_bind_result($stmt, $field1,$field2);
mysqli_stmt_execute($stmt);
while (mysqli_stmt_fetch($stmt)) {
echo "$field1 : $field2\n";
}



Ah bene, grazie mille. Praticamente è una "pre_query" che serve ad informare il db che sto per fare tante volte la stessa query.. giusto? Ok grazie!!

PS: SI il manuale è in ita.