ऐसा लगता है कि एक खराब बग (या विशेषता) है जो एक संग्रहीत कार्यविधि को कॉल करते समय प्रकट होता है जो परिणाम सेट देता है। . अर्थात। एक संग्रहीत कार्यविधि जो बिना किसी INTO क्लॉज के चयन कथन के साथ समाप्त होती है (नीचे उदाहरण देखें)।
mysqli ड्राइवर (उचित रूप से) 2 परिणाम सेट देता है। पहला संग्रहित प्रक्रिया से लौटाया गया और दूसरा एक डमी, खाली परिणाम सेट। यह ऐसा है जैसे एक से अधिक क्वेरी कमांड जारी किया गया था। इसका एक समाधान (जो सामान्य (उदाहरण के लिए) प्रश्नों पर नहीं टूटता), वैध (पहले) को संसाधित करने के बाद इस डमी परिणाम सेट का उपभोग करना है।
उदाहरण 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;