Ho alcune domande sull'utilizzo di MySQLi, query e gestione della memoria correlata. Il codice qui è solo per chiarire le mie domande, in modo da non discarica su di esso per il controllo degli errori, ecc so che deve essere fatto :)Risultati query MySQLi: approccio migliore, chiudi, libero, entrambi?
Supponiamo che io abbia qualcosa di simile:
@ $db = new mysqli($dbhost, $un, $ps, $dbname);
$query = "SELECT field1, field2 ".
"FROM table1 ".
"WHERE field1={$some_value}";
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the results
}
$query = "SELECT field1, field2 ".
"FROM table2 ".
"WHERE field1={$some_value2}";
// question 1
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the second set of results
}
// Tidy up, question 2
if ($results) {
$results->free();
}
if ($db) {
$db->close();
}
// Question 3, a general one
Quindi, sulla base dei commenti nel codice sopra, qui sono le mie domande:
Quando assegno i risultati della seconda query per
$results
, cosa succede alla memoria associata con i risultati precedenti? Devo liberare quel risultato prima di assegnare quello nuovo?Correlato a 1, quando pulisco alla fine, è sufficiente pulire solo gli ultimi risultati?
Quando provo a ripulire un risultato, dovrei liberarlo come sopra, dovrei chiuderlo o entrambi?
Chiedo domanda 3 in quanto la documentazione PHP per mysqli::query
ha un esempio che utilizza vicino, anche se vicino non fa parte della mysqli_result
(vedi esempio 1 in mysqli::query). E al contrario, il mio normale testo di riferimento PHP utilizza free
(PHP e MySQL Web Development, Quarta Edizione, Welling e Thomson).
Conoscete il momento in cui sono passati anni da quando avete lavorato a un progetto e decidete di verificare StackOverflow per una risposta a una domanda solo per scoprire che avete già chiesto e ha risposto a quella domanda anni fa ...? Uh ... Devo essere vecchio :) Grazie ancora per le ottime risposte qui sotto. –