2

ここからストアドプロシージャと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");
4

1 に答える 1

1

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

プリペアドステートメントとパラメータバインディングを使用して、メソッドを使用してクエリを定義し、を使用して値をsprepare()にバインドします。したがって、あなたの例を考えると、プリペアドステートメントのアプローチは次のようになります。?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()

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

于 2012-08-02T20:11:44.207 に答える