INCLUDE mysqli object

--

$sel = $mysqli->query("select * from `items`");
while($res = $sel->fetch_assoc()) {
$items[] = $res;
}
$sel->free_result();

$sel = $mysqli->query("select * from `sets`");
while($res = $sel->fetch_assoc()) {
$sets[] = $res;
}
$sel->free_result();

$sel = $mysqli->query("select * from `parts`");
while($res = $sel->fetch_assoc()) {
$parts[] = $res;
}
$sel->free_result();

--
DO OTHER STUFF


Ik maak nadat ik de arrays heb aangemaakt altijd het gebruikte mysqli object leeg.
Gezien ik nu dezelfde variable hergebruik lijkt me dit bij het uitvoeren van de eerste 2, $sel->free_result(); overbodig.

Zijn jullie het met me eens?
Niet per definitie. Het overschrijven van de pointer naar de resultset laat de resultset niet automatisch verdwijnen, deze zal daarmee in het geheugen blijven tot het einde van het script.
Hallo Ben,

Bedankt voor je antwoord.

Gezien het aantal records in alle 3 de tabellen en de grootte van de rest van het script is het zeker verstandig om alle 3 de keren van het uitvoeren van '$sel->free_result();' erin te laten?
Ik weet niet hoe groot je tabellen zijn en dat is ook eigenlijk niet heel relevant. In het kader van consistentie zou ik sowieso altijd alles vrijgeven, hiervoor zou je gewoon een wrapper kunnen schrijven. En gezien wat je hier laat zien kun je dat bijvoorbeeld als volgt doen:
<?php
function getFromDB($sel) {
while($res = $sel->fetch_assoc()) {
$items[] = $res;
}
$sel->free_result();
return $items;
}

$items = getFromDB($mysqli->query("select * from `items`"));
$sets = getFromDB($mysqli->query("select * from `sets`"));
$parts = getFromDB($mysqli->query("select * from `parts`"));

?>

Op die manier heb je uberhaupt geen omkijken naar het zelf vrijgeven. Technisch gezien heeft deze functie een side effect, namelijk het vrijgeven van de result set, maar anders zou je een tweetal argumenten moeten geven: het mysqli object en de query. Kan ook natuurlijk, maar voor het voorbeeld leek me dat zinloos.

Reageren