PHP TP5.1调用sqlserver数据库 存储过程 返回值问题(PDO)

本人在使用TP5.1开发程序,数据库使用的是 sql server时 需要调用sql server 的存储过程。在执行存储过程中遇到了各种坑。

以下是本人的总结,如果你也遇到同样的问题希望能对你有所帮助。

TP5.1 执行存储过程方法 

执行 存储过程他给出两个关键字 一种是 call exec 这两种 

但是生成 call 调用的存储过程回会报错 @p1 语法错误

使用这个关键字 需要使用 “{call 存储过程名称(?,?,?)}” 花括号 阔起来

但是TP5.1底层鉴别是否是存储过程 是判断是否有 call 这个关键字 

因为加了一个{  他截取字符串 就不是完整的 call 变成了 {cal 

这个参数就会false 要么你改tp5.1底层的代码

所以我不建议使用tp 推荐的 call 关键字 查了下 sqlserver 调用存储过程一般使用 exec 关键字  建议使用 exec 这个关键字来处理

以下是我使用tp5.1方法调用的 sql server 的存储过程

如果你需要规定数据类型 变量前必须加&符号 引用赋值 如果你需要返回值通过变量输出 需要加 

PDO::PARAM_INPUT_OUTPUT, 4000

这个参数

关键的地方来了 

如果你现在又想有变量输出的返回值 又想返回存储过程查出来的结果集  这个结果集只有在存储过程执行完后才给返回,中途出现异常错误只会把错误赋给变量输出出去 但是这时候是没有结果集的 这时候TP5.1就会报错

 没有查询到结果集 

这个方式是为了取结果集的 但是异常抛出是没有结果集的 所以 tp就执行了报错

我以前的作法 把TP5.1底层抛出异常 给注释掉 光获取异常 但是发现别的地方就不用使用  后续我加了一个判断 如果这个变量等于true 就是存储过程 就不抛出异常 

这样 当存储过程执行 失败时候 只会变量异常输出出去 当存储过程完全执行成功 就会返回结果集 

(我的存储过程设计 参数变量是接收异常,成功则返回结果集)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值