Zum Aufrufen einer gespeicherten Prozedur aus einer PHP-Anwendung führen Sie eine SQL-Anweisung CALL aus. Die Prozedur, die Sie aufrufen, kann Eingabeparameter (IN), Ausgabeparameter (OUT) und Eingabe-und Ausgabeparameter (INOUT) enthalten.
Informationen zu dieser Task
Diese Prozedur bereitet eine SQL-Anweisung CALL vor und führt sie aus. Weitere Informationen finden Sie auch im Abschnitt zum Vorbereiten und Ausführen von SQL-Anweisungen.
Prozedur
So rufen Sie eine gespeicherte Prozedur auf:
- Rufen Sie die Methode PDO::prepare auf, um eine Anweisung CALL mit Parametermarken vorzubereiten, die die Parameter OUT und INOUT darstellen.
- Rufen Sie für jede Parametermarke in der Anweisung CALL die Methode PDOStatement::bindParam auf, um jede Parametermarke an den Namen der PHP-Variablen zu binden, die den Ausgabewert des Parameters enthält, nachdem die Anweisung CALL abgesetzt wurde. Bei INOUT-Parametern wird der Wert der PHP-Variablen als Eingabewert des Parameters übergeben, wenn die Anweisung CALL ausgegeben wird.
- Setzen Sie den dritten Parameter, datentyp, auf eine der PDO: :PARAM_ * -Konstanten, die den Typ der zu bindenden Daten angibt:
- PDO: :PARAM_NULL
- Stellt den SQL-Datentyp NULL dar.
- PDO: :PARAM_INT
- Stellt ganzzahlige SQL-Typen dar.
- PDO: :PARAM_LOB
- Stellt große SQL-Objekttypen dar.
- PDO: :PARAM_STR
- Stellt SQL-Zeichendatentypen dar
Verwenden Sie für einen INOUT-Parameter den bitweisen Operator OR, um
PDO::PARAM_INPUT_OUTPUT an den Typ der zu bindenden Daten anzuhängen.
- Setzen Sie den vierten Parameter lengthauf die maximal erwartete Länge des Ausgabewerts.
- Rufen Sie die Methode PDOStatement::execute auf und übergeben Sie die vorbereitete Anweisung als Argument.
Beispiel
Bereiten Sie eine SQL-Anweisung CALL vor und führen Sie sie aus.
$sql = 'CALL match_animal(?, ?)';
$stmt = $conn->prepare($sql);
$second_name = "Rickety Ride";
$weight = 0;
$stmt->bindParam(1, $second_name, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 32);
$stmt->bindParam(2, $weight, PDO::PARAM_INT, 10);
print "Values of bound parameters _before_ CALL:\n";
print " 1: {$second_name} 2: {$weight}\n";
$stmt->execute();
print "Values of bound parameters _after_ CALL:\n";
print " 1: {$second_name} 2: {$weight}\n";