私はここからストアドプロシージャと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()
方法。
だから、あなたの質問に答えるために:はい、それは同時に使用することは可能です(それらは異なるものであるため)が、あなたが想像するような方法ではなく、それは冗長になります。