Изглежда има неприятна грешка (или функция), която се проявява при извикване на съхранена процедура, която връща набор от резултати. . т.е. съхранена процедура, която завършва с оператор select без клауза INTO (вижте примера по-долу).
Драйверът на mysqli (вероятно) връща 2 набора резултати. Първият е този, върнат от съхранената процедура, а вторият фиктивен празен набор от резултати. Сякаш е издадена команда за множество заявки. Едно решение за това (което не се нарушава при обичайните (напр. SELECT) заявки) е да се използва този фиктивен набор от резултати след обработка на законния (първия).
Примерен 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";
}
}
Примерна съхранена процедура:
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;