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