Stavo facendo ricerche sulle istruzioni preparate su mysqli e ho 2 domande a riguardo.istruzione mysqli preparata, come eseguire il loop del set di risultati
Mentre leggevo, ho capire che l'ordine di esecuzione di una dichiarazione preparata simile a quanto segue:
$sql = 'SELECT image_id, filename, caption FROM images WHERE image_id = ?';
// connect to the database
$conn = ....
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($image_id, $filename, $caption);
// optional: get total of records in the result set
$stmt->store_result();
$numRows = $stmt->num_rows;
// loop through the result set
while ($stmt->fetch()) {
// code goes here...
}
or
// fetch the result for one record
$stmt->fetch()
// free & close
$stmt->free_result();
$stmt->close;
$conn->close();
Qui è la mia prima domanda:
Mentre leggevo, ma anche menziona quanto segue:
Se non si associa il risultato alle variabili, utilizzare $ row = $ stmt-> fetch() e accedere a ciascuna variabile come $ row ['column_name']. Quindi,
Sono alcuni pro/contro utilizzando uno dei 2 metodi per eseguire il loop del set di risultati? Se non c'è differenza, allora perché preoccuparsi di legare il risultato usando $ stmt-> bind_result in primo luogo? Qual è il punto se posso usare $ row = $ stmt-> fetch() invece?
Ecco la mia altra domanda:
- $ stmt-> free_result(); libera cosa esattamente? il prepare() o il store_result() o altro?
- $ stmt-> chiudi; cosa sto chiudendo esattamente? lo stmt_init() o il prepare() o altro?
Speriamo che le vostre risposte saranno farmi capire dichiarazioni più preparati in modo che io possa costruire qualcosa di sicuro ...
Grazie
E se volessi eseguire un'altra query? liberare la memoria e lasciare aperta la maniglia dell'istruzione? o devo assolutamente chiudere l'handle dell'istruzione e riaprirene uno nuovo con $ stmt = $ conn-> stmt_init(); ? – Marco
Basta eseguire un'altra query e non fare nulla con chiudi e liberi. Quando si assegna un nuovo risultato alla dichiarazione, i vecchi verranno chiusi e automatici automaticamente. – JvdBerg
ok così per più query ho fondamentalmente bisogno di preparare, bind_param, eseguire, bind_result. Non è necessario stmt_init per ogni nuova query, solo una volta, come la connessione al database, solo una volta. destra? – Marco