Autor Zpráva
T-ony
Profil
Dobrý den, chtěl bych se optat ohledně uvolnění paměti.

Mám stránku, která je rozdělená na header - obsah stránky - footer v headeru mám připojení do databáze, obsah výtah, a ve footru mám
mysqli_free_result($vysledek);
mysqli_close($spojeni_db);

píše mi to tuto chybu:

Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean give

sem začátečník a tak mi pomůže cokoliv - děkuji
Tori
Profil
Hláška je jasná, v proměnné $vysledek je logická hodnota, ale měla by tam být instance třídy mysqli_result. Může to znamenat, že poslední SQL dotaz selhal, ale i že si tu proměnnou někde přepisujete jinou hodnotou - projděte si celý skript od konce, ať zjistíte, kde se do té proměnné co ukládá.

Jestli ale voláte mysql_free_result až na konci skriptu, tak to můžete klidně vynechat - paměť se uvolní automaticky při ukončení skriptu. Tohle se spíš používá v případech, kdy čtete z DB velký objem dat (třeba i několika dotazy paralelně) a potřebujete průběžně uvolňovat paměť.
Rfilip
Profil
V $vysedek je promena typu bool coz znanena ze Mysql dotaz selhal kvuli syntakticke chybe v nem, ale je divne ze toto uz nehlasi pri vypisu zadna z funkci mysql_fetch_*, takze to pri vypisu mate pravdebne podminkou osetrene., tak to musite v footeru taky osetrit.
Chtelo by to cely kod pro dalsi rady
Jinak volat tyto dve funkce na konci scriptu je celkem zbytecne, stejne se o to postrara php engine po ukonceni behu sriptu.
T-ony
Profil
Tori:
Rfilip:

No vypisuji ho až na konci, takže to zrušim, ale stejně chci přijít na to kde je chyba.

Jinak taky nevím jestli je dobře, že pokaždé když vypisuji data z databáze, vždy to ukládám to jedné proměnné

$vysledek = mysqli_query($spojeni_db,$sql)
T-ony
Profil
Rfilip, Tori:
V kodu vyše se minimálně posílá jeden příkaz a to set names utf8

if(isset($_SESSION['a']) and $_SESSION['a']==="neco_a"){
      echo "<p><a href='pr.php'>Úvod</a></p>";
      echo "<p><a href='za.php'>Zákazníci</a></p>";
      echo "<p><a href='obj.php'>Objednávky</a></p>";
      echo "<p><a href='zm.php'>Změnit heslo</a></p>";
      echo "<p><a href='od.php'>Odhlásit se</a></p>";
      if(isset($vysledek) and (!isset($_GET['objed']) and !isset($_GET['cen']))){
      mysqli_free_result($vysledek);}
      if(isset($spojeni) and (!isset($_GET['objed']) and !isset($_GET['cen']))){
      mysqli_close($spojeni);}
    }

    echo "</div>";
   echo "</div>"; 
   echo "<div class='sloupec'>";
   if(isset($_GET['objed']) or isset($_GET['cen'])){
    $footer_u = "";
    foreach($_GET as $footer_h){
      $footer_u[] .= $footer_h;
    }
    $sql = "SELECT jmeno, prijmeni FROM login WHERE id =".$footer_u[0];
    $vysledek = mysqli_query($spojeni,$sql) or die("Chyba: " . mysqli_error($spojeni));
    while ($radek = mysqli_fetch_assoc($vysledek)){
     $footer_j = $radek['jmeno'];
     $footer_p = $radek['prijmeni'];
    }
    echo "<h3>Uživatel:</h3>";
    echo "<p class='nazev_f'>Jméno</p>";
    echo "<p>$footer_j</p>";
    echo "<p class='nazev_f'>Přijmení</p>";
    echo "<p>$footer_p</p>";
    if(isset($vysledek)){
      mysqli_free_result($vysledek);}
      if(isset($spojeni)){
      mysqli_close($spojeni);}
   }
   ?>
   </div>
  </div>
 </div>
</body>
</html>
T-ony
Profil
Jenom dodávám, že v tomto případě bylo posláno jenom nastavení na utf 8, ale když jsem vypsal nějaká data, tak chybová hláška zmizela. takže dík
Tori
Profil
Tohle je zrovna případ, kde mi mysqli_close i mysqli_free_result připadá zbytečné.
Toto téma je uzamčeno. Odpověď nelze zaslat.