mysqli_free_result geeft fout
Quote:
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?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));
}
?>
$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
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.
mysqli_free_result($result);
niet zijn:
mysqli_free_result($res);
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);
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