tp5.1如何執行存儲過程?如何執行sqlserver、mysql存儲過程?

1.無返回值的執行方式:

    sqlserver:

        Db::execute('exec do_it');

    mysql:

        Db::execute('call do_it');

 2. 有返回值的執行方式:

    sqlserver:

         Db::query('exec do_it');

    mysql:

         Db::query('call do_it');

3.爲什麼tp5.1 存儲過程用  Db::execute('exec do_it'); 方式執行不成功?

   在存儲過程中 加上 SET NOCOUNT ON;  (使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息)

  然後就執行成功了。

4.同一端代碼和同一個存儲過程,怎麼之前可以果斷時間不行了?

  這裏可能之前別人設置了  SET NOCOUNT ON; 但後來不知什麼時候別人 SET NOCOUNT OFF; 掉了。(這個只是猜測,有待考證)

 1.無返回值的執行方式:

CREATE PROCEDURE do_it
  -- @Param1 varchar(30), @Param2 int
AS
BEGIN
  -- routine body goes here, e.g.
  -- SELECT 'Navicat for SQL Server'
	select top 1 * from [dbo].nnn_carlist;
END
    public function myProcedure()
    {
        //執行成功返回-1,執行失敗返回0
        $procedureRes = Db::execute('exec do_it');
        $returnData = ['procedureRes' => $procedureRes];
        if ($procedureRes == -1) {
            echo json_encode(['status' => 0, 'msg' => '刷新成功', 'data' => $returnData]);
            return;
        } else {
            echo json_encode(['status' => 1, 'msg' => '刷新失敗', 'data' => $returnData]);
            return;
        }
    }

 返回結果:

{
	"status": 0,
	"msg": "刷新成功",
	"data": {
		"procedureRes": -1
	}
}

 2. 有返回值的執行方式:

CREATE PROCEDURE do_it
  -- @Param1 varchar(30), @Param2 int
AS
BEGIN
  -- routine body goes here, e.g.
  -- SELECT 'Navicat for SQL Server'
	select top 1 * from [dbo].nnn_carlist;
END
    public function myProcedure2()
    {
        //執行成功返回-1,執行失敗返回0
        $procedureRes = Db::query('exec do_it');
        var_dump($procedureRes);exit;
    }

 返回結果,返回數組:

1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章