Laravel 型号 SQL 服务器:从存储过程获取输出参数
Laravel Model SQL Server: Get Output Parameters from Stored Procedure
我想从 Laravel 模型中的 SQL 服务器存储过程中获取输出参数,该存储过程在 SQL 服务器管理工具中运行良好,并且也在正常 php 文件中,但它在 LARAVEL 模型中不起作用。
这就是我在 Laravel 模型中执行存储过程的方式:
$id = "123454";
$email = "ABC@ABC.com";
$name = "FName, LName";
$returnval = 1; //My OUTPUT PARAMETER from SP
$action = 'ACTION_MESSAGE;
$dummy = 0;
$client = $request->input('client');
$team_l = $request->input('team');
$contact = $request->input('contact');
$team = $request->input('team_l');
$Query = DB::select
(" SET NOCOUNT ON; SET ANSI_NULLS ON; SET ANSI_WARNINGS ON; EXEC [MY_STORED_PROC]
$client,
$team,
$contact,
'$team_l',
'$id',
'$name',
'$email',
'$action',
$dummy,
$returnval
");
在 Laravel 中,当我尝试 运行 存储过程时出现以下错误:
(3/3) QueryException
SQLSTATE[IMSSP]: The active result for the query contains no fields.
这就是我在 Normal PHP 中的使用方式:
$id = "123454";
$email = "ABC@ABC.com";
$name = "FName, LName";
$returnval = 1; //My OUTPUT PARAMETER from SP
$action = 'ACTION_MESSAGE;
$dummy = 0;
$client = $_POST('client');
$team = $_POST('team');
$contact = $_POST('contact');
$team_l = $_POST('team_l');
$Query = "{ CALL My_PROC_NAME(?,?,?,?,?,?,?,?,?,?) }";
$PARAMS = array( array($client, SQLSRV_PARAM_IN),
array($team, SQLSRV_PARAM_IN),
array($contact, SQLSRV_PARAM_IN),
array($team_l, SQLSRV_PARAM_IN),
array($id, SQLSRV_PARAM_IN),
array($name, SQLSRV_PARAM_IN),
array($email, SQLSRV_PARAM_IN),
array($action, SQLSRV_PARAM_IN),
array($dummy, SQLSRV_PARAM_IN),
array($returnval, SQLSRV_PARAM_OUT)
);
$result = sqlsrv_query($connect, $Query,$PARAMS);
我的存储过程和一切似乎都很好。
我也尝试将以下内容保存在存储过程中,但没有成功:
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET ANSI_WARNINGS ON;
我是否必须 SELECT SP 中的 return 参数,以便我们可以循环并在 LARAVEL 模型中获取它。
非常感谢大家。
发布此答案,因为它对那些在 Web 开发过程中受到打击的人很有用。
经过大量研究并尝试了很多事情后,我知道答案就在我的问题本身的底部,我建议在我的存储过程末尾添加 SELECT 这将return 我的 Laravel 模型的价值。
这是一个示例存储过程:
CREATE PROCEDURE ReturnIdExample
(
@paramOne int
,@paramTwo nvarchar(255)
)
AS
SET NOCOUNT ON; --IMPORTANT!
BEGIN
-- Grab the id that was just created
DECLARE @ObjectID int;
INSERT INTO [Table]
(
[ColumnNameA]
,[ColumnNameB]
) VALUES (
@paramOne
,@paramTwo
)
SET @ObjectID = SCOPE_IDENTITY();
-- Select the id to return it back to laravel
SELECT@ObjectID AS ObjectID;
END
在 Laravel 中调用此存储过程 Model/Controller:
$submit = DB::select("EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) );
访问 Laravel 模型中的 Return 变量:
return $submit[0]->ObjectId;
它对我来说非常有效,希望这会对你们有所帮助,你们不会像我一样在这上面浪费很多时间。祝你有美好的一天。
运行 Microsoft SQL 服务器存储过程(MS SQL 服务器)使用 PHP Laravel 框架。
如果您尝试使用 Laravel 模型 运行 SP,那么您可以使用以下两种方法。
$submit = DB::select(" EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) );
$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");
如果您要传递 Varchar 参数,请使用以下内容:
$submit = DB::select(" EXEC ReturnIdExample '$paramOne', '$paramTwo' ");
如果您只是传递 INT 或 BIGINT 参数,那么这应该可以工作,您可以从 SP:
获得 return
$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");
我想从 Laravel 模型中的 SQL 服务器存储过程中获取输出参数,该存储过程在 SQL 服务器管理工具中运行良好,并且也在正常 php 文件中,但它在 LARAVEL 模型中不起作用。
这就是我在 Laravel 模型中执行存储过程的方式:
$id = "123454";
$email = "ABC@ABC.com";
$name = "FName, LName";
$returnval = 1; //My OUTPUT PARAMETER from SP
$action = 'ACTION_MESSAGE;
$dummy = 0;
$client = $request->input('client');
$team_l = $request->input('team');
$contact = $request->input('contact');
$team = $request->input('team_l');
$Query = DB::select
(" SET NOCOUNT ON; SET ANSI_NULLS ON; SET ANSI_WARNINGS ON; EXEC [MY_STORED_PROC]
$client,
$team,
$contact,
'$team_l',
'$id',
'$name',
'$email',
'$action',
$dummy,
$returnval
");
在 Laravel 中,当我尝试 运行 存储过程时出现以下错误:
(3/3) QueryException
SQLSTATE[IMSSP]: The active result for the query contains no fields.
这就是我在 Normal PHP 中的使用方式:
$id = "123454";
$email = "ABC@ABC.com";
$name = "FName, LName";
$returnval = 1; //My OUTPUT PARAMETER from SP
$action = 'ACTION_MESSAGE;
$dummy = 0;
$client = $_POST('client');
$team = $_POST('team');
$contact = $_POST('contact');
$team_l = $_POST('team_l');
$Query = "{ CALL My_PROC_NAME(?,?,?,?,?,?,?,?,?,?) }";
$PARAMS = array( array($client, SQLSRV_PARAM_IN),
array($team, SQLSRV_PARAM_IN),
array($contact, SQLSRV_PARAM_IN),
array($team_l, SQLSRV_PARAM_IN),
array($id, SQLSRV_PARAM_IN),
array($name, SQLSRV_PARAM_IN),
array($email, SQLSRV_PARAM_IN),
array($action, SQLSRV_PARAM_IN),
array($dummy, SQLSRV_PARAM_IN),
array($returnval, SQLSRV_PARAM_OUT)
);
$result = sqlsrv_query($connect, $Query,$PARAMS);
我的存储过程和一切似乎都很好。 我也尝试将以下内容保存在存储过程中,但没有成功:
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET ANSI_WARNINGS ON;
我是否必须 SELECT SP 中的 return 参数,以便我们可以循环并在 LARAVEL 模型中获取它。
非常感谢大家。
发布此答案,因为它对那些在 Web 开发过程中受到打击的人很有用。
经过大量研究并尝试了很多事情后,我知道答案就在我的问题本身的底部,我建议在我的存储过程末尾添加 SELECT 这将return 我的 Laravel 模型的价值。
这是一个示例存储过程:
CREATE PROCEDURE ReturnIdExample
(
@paramOne int
,@paramTwo nvarchar(255)
)
AS
SET NOCOUNT ON; --IMPORTANT!
BEGIN
-- Grab the id that was just created
DECLARE @ObjectID int;
INSERT INTO [Table]
(
[ColumnNameA]
,[ColumnNameB]
) VALUES (
@paramOne
,@paramTwo
)
SET @ObjectID = SCOPE_IDENTITY();
-- Select the id to return it back to laravel
SELECT@ObjectID AS ObjectID;
END
在 Laravel 中调用此存储过程 Model/Controller:
$submit = DB::select("EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) );
访问 Laravel 模型中的 Return 变量:
return $submit[0]->ObjectId;
它对我来说非常有效,希望这会对你们有所帮助,你们不会像我一样在这上面浪费很多时间。祝你有美好的一天。
运行 Microsoft SQL 服务器存储过程(MS SQL 服务器)使用 PHP Laravel 框架。
如果您尝试使用 Laravel 模型 运行 SP,那么您可以使用以下两种方法。
$submit = DB::select(" EXEC ReturnIdExample ?,?", array( $paramOne ,$paramTwo ) );
$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");
如果您要传递 Varchar 参数,请使用以下内容:
$submit = DB::select(" EXEC ReturnIdExample '$paramOne', '$paramTwo' ");
如果您只是传递 INT 或 BIGINT 参数,那么这应该可以工作,您可以从 SP:
获得 return$submit = DB::select(" EXEC ReturnIdExample $paramOne,$paramTwo ");