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

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

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

clipboard.png

阅读 3.7k
3 个回答

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

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

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

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

问题解决了,原因是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...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题