/ / MYSQLiでストアドプロシージャにパラメータをバインドすることは可能ですか? - php、ストアドプロシージャ、mysqli

MYSQLiのストアドプロシージャにパラメータをバインドすることは可能ですか? - PHP、ストアドプロシージャ、mysqli

私はここからストアドプロシージャとMYSQLiを読んでいます。 http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

と他のソースが、まだストアドプロシージャを呼び出す方法がわからない ? (準備文のように)

これとよく似た方法で、パラメータをストアドプロシージャにバインドすることは可能ですか。

$mysqli->query("CREATE PROCEDURE p(IN id_var INT) BEGIN INSERT INTO test(id)
VALUES(id_var); END;"))
$mysqli->bindParam("i", $some_int);
$mysqli->query("CALL p");

回答:

回答№1の場合は-1

パラメータのバインドはPHP側の操作です。ストアドプロシージャはMySQLのものです。この2つは関連性がないので、そのように扱ってはいけません。

プリペアドステートメントとパラメータバインディングでは、 prepare() その後、メソッドに値をバインドします。 ?の使用 bind_param()。だからあなたの例を考えると、プリペアドステートメントのアプローチはこのようになります:

$stmt = $mysqli->prepare("INSERT INTO test (id) VALUES (?)");
$stmt->bind_param("i", $some_int);
$stmt->execute();

一方、ストアドプロシージャでは、単にそれを呼び出すだけです。 を使用して CALL コマンド 通常のクエリとして:

//procedure created beforehand
CREATE PROCEDURE p(IN id_var INT)
INSERT INTO test (id)
VALUES (id_var);
//now in PHP:
$mysqli->query("CALL p($some_int)");

実行できるかどうかはわかりません CREATE PROCEDURE を使用して query() 方法。

だから、あなたの質問に答えるために:はい、それは同時に使用することは可能です(それらは異なるものであるため)が、あなたが想像するような方法ではなく、それは冗長になります。