Tampaknya ada bug (atau fitur) buruk yang dimanifestasikan saat memanggil prosedur tersimpan yang mengembalikan kumpulan hasil. . Yaitu. prosedur tersimpan yang diakhiri dengan pernyataan pilih tanpa klausa INTO (lihat contoh di bawah).
Driver mysqli (mungkin) mengembalikan 2 set hasil. Yang pertama adalah yang dikembalikan dari prosedur tersimpan dan yang kedua adalah kumpulan hasil dummy dan kosong. Ini seperti perintah beberapa kueri yang dikeluarkan. Salah satu solusi untuk ini (yang tidak rusak pada kueri biasa (mis. SELECT), adalah dengan menggunakan set hasil dummy ini setelah memproses yang sah (yang pertama).
Contoh kode php
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";
}
}
Contoh prosedur tersimpan:
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;