Ausführen einer gespeicherten Prozedur mit Cursor in PHP

Ich habe eine gespeicherte Prozedur, die ich versuche, von meinem PHP aufzurufen. Hier ist die gespeicherte Prozedur:

BEGIN
DECLARE done INT DEFAULT FALSE;
declare phone_temp VARCHAR(20) default '';
declare phone_cur cursor for SELECT DISTINCT sentNum FROM Queue;
declare continue handler for not found set done = true;

#create temp table
create temporary table if not exists temp_return AS SELECT * FROM Queue LIMIT 0;
#empty if exists
delete from temp_return;

open phone_cur;

phone_loop: LOOP
    fetch phone_cur into phone_temp;
    if done then
        leave phone_loop;
    end if;

   insert into temp_return SELECT * FROM Queue WHERE num2=phone_temp LIMIT 2;
   insert into temp_return SELECT * FROM Queue WHERE num1=phone_temp LIMIT 1;
end loop phone_loop;
close phone_cur;

select * from temp_return;

drop table if exists temp_return;
END

Direkt in der MySQL-Workbench funktioniert der Aufruf. In PHP funktioniert es nicht. Hier ist mein PHP:

function grabFromSmsQueue(){
    global $myStmt, $conn;
    if(isset($myStmt)){
        $myStmt -> execute();
    }
    else{
        $query = "CALL myStoredProc();";
        $myStmt = $conn->stmt_init();
        $myStmt -> prepare($query);
        $myStmt -> execute();

    }
    $result = $myStmt -> get_result();
    //print_r ($result);
    $info = [];
    if(isset($result)){
        while($data = $result->fetch_assoc()){
            $info[] = $data;
        }
    }
    return $info;
}

ei einer solchen Verbindung erhalte ich die folgende Fehlermeldun

The localhost page isn’t working
localhost didn’t send any data.
ERR_EMPTY_RESPONSE

Ich habe mein Problem auf ein Problem mit @ zurückgeführ$data = $result->fetch_assoc(), denn wenn ich das auskommentiere und in das @ setprint_r Ich bekomme tatsächlich etwas zurück, das istmysqli_result Object ( [current_field] => 0 [field_count] => 9 [lengths] => [num_rows] => 0 [type] => 1 ). Ich habe den Schluss gezogen, dass es nicht funktioniert, weil[num_rows] => 0.

Nun, als ich zu meiner gespeicherten Prozedur zurückkehrte, nahm ich alle Erwähnungen eines Cursors heraus und ersetzte sie durch einen fest codierten Wert, und es funktionierte sowohl in der Workbench als auch in PHP. Ich habe bereits überprüft, dass der Benutzer, der über PHP eine Verbindung herstellt, über die Berechtigung verfügt, dass die Verbindung offen ist und dass derselbe Code andere gespeicherte Prozeduren ausführen kann (solche, die keine Cursor enthalten). Bedeutet das, dass ich in gespeicherten Prozeduren, die von PHP aufgerufen werden, keine Cursor verwenden kann? Gibt es Alternativen zu Cursorn? Vermisse ich etwas in meiner PHP-Syntax, um mit Cursorn umzugehen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage