Heim >Datenbank >MySQL-Tutorial >Wie rufe ich gespeicherte MySQL-Prozeduren mit Eingabe- und Ausgabeparametern in PHP auf?

Wie rufe ich gespeicherte MySQL-Prozeduren mit Eingabe- und Ausgabeparametern in PHP auf?

Susan Sarandon
Susan SarandonOriginal
2024-11-07 00:26:02585Durchsuche

How to Call MySQL Stored Procedures with Input and Output Parameters in PHP?

Aufrufen gespeicherter MySQL-Prozeduren mit Eingabe- und Ausgabeparametern in PHP

Entwickler stehen häufig vor der Notwendigkeit, gespeicherte Prozeduren aus PHP-Skripten aufzurufen. Gespeicherte Prozeduren können eine Kombination aus Eingabe- und Ausgabeparametern annehmen, wobei Eingabeparameter Werte für die Prozedur bereitstellen und Ausgabeparameter berechnete Werte von der Prozedur empfangen. Dieser Artikel konzentriert sich auf den Aufruf gespeicherter MySQL-Prozeduren, die speziell sowohl Eingabe- als auch Ausgabeparameter annehmen, mit Ausnahme von „Inout“-Parametern.

Die Herausforderung der MySQLi-Schnittstelle

Leider sind die prozeduralen und objektorientierten Schnittstellen von MySQLi Es fehlt die native Unterstützung für Ausgabeparameter für gespeicherte Prozeduren. Um dieses Problem zu umgehen, kann man MySQL-Benutzervariablen verwenden, um Ausgabewerte zu empfangen und sie mit einer separaten SELECT-Anweisung abzurufen. Durch die Implementierung von Benutzervariablen und SELECT-Anweisungen ist es möglich, gespeicherte Prozeduren effektiv mit Eingabe- und Ausgabeparametern zu verarbeiten.

Prozeduraler Ansatz

Betrachten Sie den folgenden PHP-Code unter Verwendung der prozeduralen MySQLi-Schnittstelle:

$procInput1 = 123;
$procInput2 = 456;
$procInput3 = 789;

$mysqli = mysqli_connect();

$call = mysqli_prepare($mysqli, 'CALL test_proc(?, ?, ?, @sum, @product, @average)');
mysqli_stmt_bind_param($call, 'iii', $procInput1, $procInput2, $procInput3);
mysqli_stmt_execute($call);

$select = mysqli_query($mysqli, 'SELECT @sum, @product, @average');
$result = mysqli_fetch_assoc($select);
$procOutput_sum = $result['@sum'];
$procOutput_product = $result['@product'];
$procOutput_average = $result['@average'];

In diesem Beispiel werden MySQL-Benutzervariablen (@sum, @product, @average) in der gespeicherten Prozedur definiert. Der Aufruf von mysqli_query("SELECT @sum, @product, @average") ruft die von der gespeicherten Prozedur festgelegten Werte ab und weist sie PHP-Variablen zu ($procOutput_sum, $procOutput_product, $procOutput_average).

Object- Orientierter Ansatz

Alternativ kann die objektorientierte MySQLi-Schnittstelle verwendet werden:

$procInput1 = 123;
$procInput2 = 456;
$procInput3 = 789;

$mysqli = new mysqli();

$call = $mysqli->prepare('CALL test_proc(?, ?, ?, @sum, @product, @average)');
$call->bind_param('iii', $procInput1, $procInput2, $procInput3);
$call->execute();

$select = $mysqli->query('SELECT @sum, @product, @average');
$result = $select->fetch_assoc();
$procOutput_sum = $result['@sum'];
$procOutput_product = $result['@product'];
$procOutput_average = $result['@average'];

Der objektorientierte Ansatz folgt einem ähnlichen Muster und verwendet die Funktionen „prepare()“, „bind_param()“ und „execute“. () und query()-Methoden zum Aufrufen der gespeicherten Prozedur und zum Abrufen der Ausgabewerte über Benutzervariablen.

Durch die Nutzung von MySQL-Benutzervariablen und SELECT-Anweisungen können PHP-Entwickler effektiv gespeicherte Prozeduren aufrufen, die sowohl Eingabe als auch Ausgabe erfordern Parameter. Diese Technik bietet eine Problemumgehung für die fehlende Unterstützung nativer Ausgabeparameter in der MySQLi-Schnittstelle.

Das obige ist der detaillierte Inhalt vonWie rufe ich gespeicherte MySQL-Prozeduren mit Eingabe- und Ausgabeparametern in PHP auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn