suchen

Heim  >  Fragen und Antworten  >  Hauptteil

PHP: Rufen Sie die gespeicherte MySQL-Prozedur mit Eingabe- und Ausgabeparametern auf (nicht „INOUT“)

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粉502608799P粉502608799433 Tage vor785

Antworte allen(2)Ich werde antworten

  • P粉122932466

    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
                            ]);

    Antwort
    0
  • P粉576184933

    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'];

    Antwort
    0
  • StornierenAntwort