PHP: Rufen Sie die gespeicherte MySQL-Prozedur mit Eingabe- und Ausgabeparametern auf (nicht „INOUT')
P粉502608799
P粉502608799 2023-10-19 16:56:30
0
2
782

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

(Mir ist klar, dass der folgende Code ungültig ist)

, 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 verwenden

Inout-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粉502608799
P粉502608799

Antworte allen(2)
P粉122932466
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粉576184933

不幸的是,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'];
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage