Heim > Fragen und Antworten > Hauptteil
Ich möchte eine gespeicherte Prozedur in MySQL von PHP aus aufrufen. Der Prozess benötigt Eingabe- und Ausgabeparameter – nicht „INOUT“-Parameter .
Um ein einfaches Beispiel zu geben: Angenommen, ich habe die folgende gespeicherte Prozedur in MySQL:
DELIMITER $$ DROP PROCEDURE IF EXISTS `test_proc`$$ CREATE PROCEDURE `test_proc`( in input_param_1 int, in input_param_2 int, in input_param_3 int, out output_sum int, out output_product int, out output_average int ) BEGIN set output_sum = input_param_1 + input_param_2 + input_param_3; set output_product = input_param_1 * input_param_2 * input_param_3; set output_average = (input_param_1 + input_param_2 + input_param_3) / 3; END$$ DELIMITER ;
Nehmen wir nun von Seiten des PHP-Skripts/der PHP-Seite an, ich habe die folgenden Variablen (nennen wir sie „Proc-Eingabevariablen“) und möchte sie als Eingabeparameter für die gespeicherte Prozedur bereitstellen, wenn ich sie aufrufe:
$procInput1 = "123"; $procInput2 = "456"; $procInput3 = "789";Angenommen, ich habe auf der PHP-Skript-/Seitenseite auch die folgenden Variablen (nennen wir sie „Proc-Ausgabevariablen“) und ich möchte sie als
Ausgabeparameter für die gespeicherte Prozedur bereitstellen, wenn ich sie aufrufe, und zwar durch die gespeicherte Prozedur Einstellungen :
$procOutput_sum;
$procOutput_product;
$procOutput_average;
Also, im Wesentlichen, was ich tun möchte, im Wesentlichen
, in Bezug auf PHP-Skripte/Seiten, ist...
call test_proc($procInput1, $procInput2, $procInput3, $procOutput_sum, $procOutput_product, $procOutput_average);
...Nach dem Aufruf erscheint der folgende PHP-Code...< /p>
echo "Sum: ".$procOutput_sum; echo "Product: ".$procOutput_product; echo "Average: ".$procOutput_average;
...sollte die folgende Ausgabe erzeugen:
Sum: 1368 Product: 44253432 Average: 456
Beachten Sie, dass ich dies nach Möglichkeit gerne mit MySQLi-Prozeduren
Funktionen/Schnittstellen tun würde. Wenn es nicht möglich ist, verwende ich eine Methode, damit es funktioniert.Ich programmiere schon eine Weile, aber die PHP-Sprache ist für mich ein relativ neues Unterfangen. Ich habe unzählige Tutorials zum Aufruf gespeicherter MySQL-Prozeduren aus PHP gefunden. Einige sind Tutorials zum Aufrufen gespeicherter Prozeduren mit Eingabeparametern, andere sind Tutorials zum Aufrufen gespeicherter Prozeduren mit
Ausgabeparametern und einige verwendenInout-Parameter. Ich habe keine Tutorials oder Beispiele zum Aufrufen einer gespeicherten Prozedur gefunden, die gleichzeitig gleichzeitig Eingabe- und Ausgabeparameter verwendet, ohne ausdrücklich nicht <调用存储过程的教程/strong> die „inputout“-Parameter zu verwenden. Ich kann nicht herausfinden, wie ich Parameterbindungen (z. B. mysqli_stmt_bind_param und mysqli_stmt_bind_result) codieren und zum Laufen bringen kann. Jede Hilfe wäre sehr dankbar, vielen Dank im Voraus!
P粉1229324662023-10-20 15:06:04
DB::select('call SP_fci_cb_emp_comp_salary_revision_add(?,?,?,@,@)', [ $my_compensation['detail']['employee_master_id'], Carbon::createFromFormat('d/m/Y', $salary_revised_result['detail']->effective_date)->format('Y-m-d'), $request->user_id ]);
P粉5761849332023-10-20 13:23:10
不幸的是,MySQLi 没有对输出存储过程参数的任何本机支持;必须改为输出到 MySQL 用户变量,然后使用单独的 SELECT 获取值
声明。
使用程序接口:
$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'];
或者,使用面向对象的接口:
$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'];