2016-08-23 13 views
0

は私の典型的なストアドプロシージャのスタートだ:MySQLストアドプロシージャにパラメータを任意の順序で渡す方法はありますか?ここ

CREATE DEFINER=`joe`@`%` PROCEDURE `Add_Item`(
    IN usernameApp VARCHAR(255), 
    IN barcodeApp VARCHAR(255), 
    IN quantityApp VARCHAR(255) 
) 
BEGIN 

私はPHPから、このコードのようなものでそれを呼び出します。問題は、私はもう少しダイナミックな何かを探していますということです

CALL Add_Item('ethan', '987261826671', '12'); 

私が作成しようとしている動的アプリケーションの順序を保証することができないため、任意の順序でパラメータを使用してストアドプロシージャを呼び出すことができます。名前付きのパラメータがうまくいくような気がしますが、MySQLには手続きのためのパラメータはありません。

このような何かが(明らかに擬似コード)例えば、働くだろう:

CALL Add_Item(quantity>'12' name>'ethan', barcode>'987261826671'); 

のアイデア?

+1

いいえ。 'add_item(quantityapp = 12、usernameapp = 'ethan'、etc ...)'を実行する方法はありません。 sprocで定義されている他のパラメータにパラメータを渡すか、何も渡さない。 –

答えて

1

使用PDO:ストアドプロシージャへ

$sth = $dbh->prepare('CALL Add_Item(:quantity, :name, :barcode)'); 
// You can pass paremeters in any order here: 
$sth->execute([ 
    ':quantity' => 12, 
    ':name' => 'ethan', 
    ':barcode' => '987261826671', 
]); 
0

引数が固定されています。オプションの引数はなく、順序は固定されています。 PerlやPythonのような名前付き引数のようなものはありません。言い換えれば

SET @quantity = 12; 
SET @name = 'ethan'; 
SET @barcode = '987261826671'; 
CALL Add_Item(); 

、セッション変数の代わりに、プロシージャ引数を使用します。

あなたができるこの問題を回避するには、次のようです。次に、必要な順序でセッション変数を設定できます。

セッション変数は、接頭辞@を使用するだけで、プロシージャコード内で参照できます。セッション変数は、現在のセッション内でのみ表示されます。

しかし、この回避策は、再帰呼び出しのプロシージャにパラメータを渡す再帰プロシージャではうまく機能しません。

また、セッション中に手順を何回も呼び出す場合は、値を変更することを忘れないでください。そうしないと、以前の呼び出しの値が次の呼び出しに引き継がれます。

これは奇妙な質問です。多くのプログラミング言語は、PHPでも、引数を指定して関数またはプロシージャを特定の順序で呼び出す必要があります。これは難しい制約ではありません。

関連する問題