Ik krijg volgende fout
Fatal error: Uncaught TypeError: mysqli_free_result(): Argument #1 ($result) must be of type mysqli_result, bool given

Bij onderstaande code terwijl de code toch werkt.

<?php
    $sql = '
        set @id:=54;
        select
            @id:=t.id,
            @pw:=t.p_winst,
            @pr:=t.p_remise,
            @pv:=t.p_verlies,
            @pgf:=t.p_geefforfait,
            @pkf:=t.p_krijgforfait,
            @pa:=t.p_afgebroken,
            @pu:=t.p_uitgesteld,
            @po:=t.p_onbekend
        from
            trn_toernooien t
        where
            id=@id;
        SELECT
            naam,
            voornaam,
            (select count(id) from trn_partijen p where s.id in (p.speler1, p.speler2) and p.uitslag in ("0", "1", "2", "3", "f")) partijen,
            @wg := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="3") wg,
            @zg := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="1") zg,
            @wr := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="2") wr,
            @zr := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="2") zr,
            @wv := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="1") wv,
            @zv := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="3") zv,
            
            @wgf := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="0") wgf,
            @wkf := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="f") zgf,
            
            
            @zkf := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="f") wkf,
            @zgf := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="0") zgf,
            
            @wa := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="a") wa,
            @za := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="a") za,
            @wu := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="u") wu,
            @zu := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="u") zu,
            @wo := (select count(id) from trn_partijen p where p.speler1=s.id and p.uitslag ="?") wo,
            @zo := (select count(id) from trn_partijen p where p.speler2=s.id and p.uitslag ="?") zo,
            (
                (@wg+@zg) * @pw +
                (@wr+@zr) * @pr +
                (@wv+@zv) * @pv +
                (@wa+@za) * @pa +
                (@wu+@zu) * @pu +
                (@wo+@zo) * @po +
                (@wgf+@zgf) * @pgf +
                (@wkf+@zkf) * @pkf +
                s.voorsprong_punten
            ) punten
        FROM
            trn_spelers s
        WHERE
            id_toernooi=@id
        ORDER BY
            voornaam,
            naam
    ';
    $con = opendatabasei();
    $res = mysqli_multi_query($con, $sql);
    if($res) {
        do {
            if($result = mysqli_store_result($con)) {
                $data = mysqli_fetch_all($result, MYSQLI_ASSOC);
                echo array2table($data);
                //var_dump($data);
            }else{
                fout(mysqli_error($con));
            }
            //mysqli_free_result($result);
            
            if (mysqli_more_results($con)) {
              echo '<hr>';
            }
        } while (mysqli_next_result($con));
    }else{
        fout(mysqli_error($con));
    }
?>


query 1: Mijn variabele geeft correct de waarde 54
query 2: 9 variabelen hebben de juiste waarde
Query 3: Resultaat klopt met wat het moet zijn

Waarom bestaat de functie dan?
Moet ik die dan wel gebruiken?

Jan
mysqli_free_result staat in jouw voorbeeld uitgecommentariseerd en kan dus niks doen.

Verder legt de foutmelding uit wat er misgaat:

Argument #1 ($result) must be of type mysqli_result, bool given

Blijkbaar is $result niet van het type mysqli_result.
moet
mysqli_free_result($result);

niet zijn:

mysqli_free_result($res);
Bedankt voor de antwoorden.

Ozzie PHP op 20/01/2023 11:49:56

mysqli_free_result staat in jouw voorbeeld uitgecommentariseerd en kan dus niks doen.

het is niet de kwestie van uitgeschakeld.
De vragen
* "Waarom bestaat de functie dan?"
* "Moet ik die dan wel gebruiken?"
als ik ze uitschakel dan werkt het wel als ik ze inschakel heb ik een fatal error. Ter info enkel op de 1° query niet op de 2 anderen.

Ivo P op 20/01/2023 16:35:29

moet
mysqli_free_result($result);
niet zijn:
mysqli_free_result($res);


Volgens mij niet $res is de variable voor mysqli_multi_query en niet voor mysqli_store_result


Voorbeeldcode komt van https://www.w3schools.com/php/func_mysqli_free_result.asp

Jan

Reageren