Er lijkt een vervelende bug (of functie) te zijn die zich manifesteert bij het aanroepen van een opgeslagen procedure die een resultatenset retourneert. . D.w.z. een opgeslagen procedure die eindigt met een select-statement zonder een INTO-clausule (zie onderstaand voorbeeld).
De mysqli-driver retourneert (waarschijnlijk) 2 resultatensets. De eerste is degene die is geretourneerd uit de opgeslagen procedure en de tweede een dummy, lege resultatenset. Het is alsof er een opdracht voor meerdere zoekopdrachten is gegeven. Een oplossing hiervoor (die niet kapot gaat bij gebruikelijke (bijv. SELECT) query's), is om deze dummy-resultatenset te gebruiken nadat de legitieme (de eerste) is verwerkt.
Voorbeeld php-code
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";
}
}
Voorbeeld opgeslagen procedure:
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;