2

ストアドプロシージャを使用したことはありませんが、クエリをサーバーに移動する必要があるときに現実に直面しました。手伝ってください。

これは、PHPを介して作成した関数です。

function getResults($userid) {
        $query = "select * from myTable where iduser= ?";
        $stmt = $this->openDb()->prepare($query);
        $stmt->bindValue(1, $userid, PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }

ストアドプロシージャを使用したことがなく、アプローチ方法がわかりません。

  1. これをストアドプロシージャとしてMySQLに追加して、1つの整数変数を送信できるようにするにはどうすればよいですか?
  2. ストアドプロシージャに送信する整数変数を「準備」するにはどうすればよいですか
  3. ストアドプロシージャからphp関数に結果セットを取得するにはどうすればよいですか。

あなたが支援してくれるなら、私はあなたの解決策を検討し、私自身で続けることができるでしょう。

グーグルをチェックしたところ、ストアドプロシージャを作成するには、次のように開始する必要があることがわかりました。

CREATE PROCEDURE `getResults` (IN userid INT)  
BEGIN  

END
4

1 に答える 1

1

マイSQL:

DELIMITER $$

DROP PROCEDURE IF EXISTS getResults$$

CREATE PROCEDURE getResults(IN I_USERID INT(10))
BEGIN
    SELECT * FROM `myTable` WHERE iduser = I_USERID;
END$$

DELIMITER ;

PHP:

$sql = "CALL getResults(?)";
$stmt = $this->openDb()->prepare($sql);
$stmt->execute(array($userid));

while ($row = $stmt->fetchObject()) {
    //use fields like this: $row->fieldname1, $row->fieldname2...
}
$stmt->closeCursor();

*ちなみに、クエリでセレクターを使用するのではなく、フィールドに明示的に名前を付けることをお勧めします。

お役に立てば幸いです、S.

于 2013-02-15T23:24:24.310 に答える