Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP - MySQL erhält den Wert des out-Parameters von einer gespeicherten Prozedur

Oder machen Sie einfach einen "SELECT @id AS id" dann $row->id wird gut funktionieren. Ich benenne ausgewählte Spalten immer um, um den Namen bei Bedarf aussagekräftig zu halten :-)

Übrigens können Sie den Aufruf einfach verketten und @... (mit einem;-Anweisungstrennzeichen) auswählen, und RS ist der zurückgegebene Wert. Leider gibt dies eine Mehrfach-Ergebnismenge zurück, und Sie müssen die gesamte Menge löschen, da sonst die nachfolgenden Abfragen ins Stocken geraten. Siehe folgende Beispiele:

$db->multi_query( "CALL addNewUser($name,$age,@id);SELECT @id as id" );
$db->next_result();            // flush the null RS from the call
$rs=$db->store_result();       // get the RS containing the id
echo $rs->fetch_object()->id, "\n";
$rs->free();

Alternativ fügen Sie select in addNewUser hinzu und geben ein RS anstelle von out param

zurück
$rs = $db->query( "CALL addNewUser($name,$age)" );
echo $rs->fetch_object()->id, "\n";
$rs->close();
$db->next_result();            // flush the null RS from the call

Der erste gibt ein Multiquery-Set (NULL, RS) und das zweite ein (RS, NULL)-Set zurück, daher können Sie einen einfachen query()-Aufruf verwenden, der das erste fetch_object() einbettet, aber Sie müssen immer noch den RS-Stack leeren.