从 PHP 中的存储过程获取输出
Posted
技术标签:
【中文标题】从 PHP 中的存储过程获取输出【英文标题】:Getting output from stored procedure in PHP 【发布时间】:2019-02-08 15:46:28 【问题描述】:我现在在php中调用一个存储过程,该过程的第三个参数是一个OUT参数所以它应该得到输出
当我运行这个时:
function createNameRecord($firstName,$lastName)
try
$sql = "CALL schema.CREATE_RECORD(?,?,?)";
$values = [$firstName,$lastName,$returnID];
return DB::connection('odbc')->select($sql,$values);
dd($returnID);
catch(Exception $e)
return false;
程序正常运行并重新加载页面,当我检查数据库时,记录已成功创建。但是,我需要作为创建记录 ID 的输出变量,并且我需要将其返回给随后运行的函数。
因此,既然它运行,成功创建记录并重新加载页面,那么我如何转储输出 $returnID
以便我可以验证它是否存储了我返回的 ID?上面的转储和死机不起作用,可能是因为页面重新加载。
验证退货 ID 的最佳方法是什么?
【问题讨论】:
如果您只是在调试,请阻止重定向,并回显变量/退出。如果您需要在页面加载之间保留该字段,请将其存储在会话中。见Flash Messages 您在到达 dd($returnID); 之前返回把那一行放在前面,或者把第 5 行的 return 去掉,放在第 6 行的开头。 @Millar248 我必须在获取返回 ID 之前执行 proc,所以你是说删除“return”并将其放在转储/死之前? 我只是说,据我所知,return 结束了一个函数。我不知道“dd()”在做什么,但是如果您的代码正在运行,并且您希望 dd 发送回数据,我怀疑它会在调用 return 后这样做。如果是我,我会这样做:尝试 //... DB::connection('odbc')->select($sql,$values); dd($returnID); catch(Exception $e) return false; 返回真; @FrankerZ 命中此函数的控制器最后使用 return back() 并且表单正在使用提交按钮提交。能否举例说明如何执行此过程并在成功后将 ID 闪烁在消息中? 【参考方案1】:我是社区的新手,不完全知道如何指导您,但如果您尝试mysqli_real_query() 并按照文档所述检索结果:
对数据库执行单个查询,其结果可以是 使用 mysqli_store_result() 检索或存储或 mysqli_use_result() 函数。
【讨论】:
【参考方案2】:一旦您的函数看到return
,该函数将不再执行该行之后的任何代码。在这种情况下,dd($returnID);
永远不会被执行。如果你只是调试,只需删除return
,然后让dd()
输出/死:
function createNameRecord($firstName,$lastName)
try
$sql = "CALL schema.CREATE_RECORD(?,?,?)";
$values = [$firstName,$lastName,$returnID];
DB::connection('odbc')->select($sql,$values);
dd($returnID);
catch(Exception $e)
return false;
在这种情况下,您并不关心返回值(无论调用createNameRecord
),因为您只希望脚本结束/终止。
如果它仍在重新加载页面,那么你的 catch 语句可能正在执行,你也应该调试它:
function createNameRecord($firstName,$lastName)
try
$sql = "CALL schema.CREATE_RECORD(?,?,?)";
$values = [$firstName,$lastName,$returnID];
DB::connection('odbc')->select($sql,$values);
dd($returnID);
catch(Exception $e)
dd($e);
【讨论】:
我确实尝试过,但它仍然刷新页面,我认为这是我的问题。驱动这个的控制器使用 return back() 如果这会有所不同,并且表单作为输入提交按钮。因此,它仍然可以通过您的更改成功创建记录,但页面重新加载并且我的 ID 没有被转储 你是对的,它仍然插入记录,但我在过程中得到一个无效的游标状态,它把 $returnID 设置为 null以上是关于从 PHP 中的存储过程获取输出的主要内容,如果未能解决你的问题,请参考以下文章