Zdá se, že existuje ošklivá chyba (nebo funkce), která se projevuje při volání uložené procedury, která vrací sadu výsledků. . Tj. uložená procedura, která končí příkazem select bez klauzule INTO (viz příklad níže).
Ovladač mysqli (pravděpodobně) vrací 2 sady výsledků. První je ten, který se vrátil z uložené procedury, a druhý fiktivní, prázdná sada výsledků. Je to, jako by byl vydán příkaz s více dotazy. Jedním z řešení (které se při obvyklých dotazech (např. SELECT) nezlomí) je spotřebovat tuto fiktivní sadu výsledků po zpracování té legitimní (první).
Příklad php kódu
function do_query($con, $sql)
{
if ( !($result = mysqli_query($con, $sql)) )
throw new QueryException(mysqli_error($con));
if ($result === true)
return true;
while ($row = mysqli_fetch_assoc( $result )) {
// process rows
}
// Hack for procedures returning second dummy result set
while(mysqli_more_results($con)) {
mysqli_next_result($con);
// echo "* DUMMY RS \n";
}
}
Příklad uložené procedury:
CREATE PROCEDURE selectStaleHeaders()
NOT DETERMINISTIC
SELECT TT.*
FROM one_pretty_table AS TT
LEFT JOIN another AS AN on TT.fk_id = AN.id
WHERE TT.id IS NULL;