请问Linux上 如何用pdo调用调用存储过程。为啥我返回的值都是Array()

发布于 2022-09-06 02:45:15 字数 487 浏览 26 评论 0

在win平台下我使用 $finance = DB::connection('sqlsrv')->select("exec xgx_finance_ledger ?,?,?", [$user_id, $start, $end]);可获得结果集,但是在Linux平台则返回[].
于是我使用pdo方式,但是还是返回Array(),求大神解答

clipboard.png
这些代码都不起作用

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

轮廓§ 2022-09-13 02:45:15

PDO::FETCH_ASSOC 指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回

紧拥背影 2022-09-13 02:45:15

哥们儿,你要求的就是返回数组格式啊!PDO::FETCH_ASSOC
你把fetch里面的fetch_assoc去掉,或者按照下面的方式,都可以。

$connection = new PDO($connection_string); 
$connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

设置连接的时候为对象,默认好像就是对象,但是这个可以强制设置,只需设置一次即可,后面就不需要了。

无风消散 2022-09-13 02:45:15

问题解决了,原因是win和Linux关于连接sqlserver驱动程序的问题,SQL Server ODBC 驱动程序和用于 SQL Server 的 Microsoft OLE DB 提供程序在连接时自动将 ANSI_NULL_DFLT_ON 设置为 ON。对来自 DB-Library 应用程序的连接,SET ANSI_NULL_DFLT_ON 默认为 OFF。
Linux 平台在laravel当执行 $finance = DB::connection('sqlsrv')->select("exec xgx_finance_ledger ?,?,?", ['J44022', '2017-02-01', '2017-09-19']);去获取数据时,由于存储过程中有多个可能为空的数据,如:

clipboard.png
导致存储过程不执行,程序出错。
解决方法加一条语句 SET ANSI_NULL_DFLT_ON 。
参考链接:http://www.yesky.com/imagesne...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文