在win平台下我使用 $finance = DB::connection('sqlsrv')->select("exec xgx_finance_ledger ?,?,?", [$user_id, $start, $end]);可获得结果集,但是在Linux平台则返回[].
于是我使用pdo方式,但是还是返回Array(),求大神解答
这些代码都不起作用
在win平台下我使用 $finance = DB::connection('sqlsrv')->select("exec xgx_finance_ledger ?,?,?", [$user_id, $start, $end]);可获得结果集,但是在Linux平台则返回[].
于是我使用pdo方式,但是还是返回Array(),求大神解答
这些代码都不起作用
哥们儿,你要求的就是返回数组格式啊!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']);去获取数据时,由于存储过程中有多个可能为空的数据,如:
导致存储过程不执行,程序出错。
解决方法加一条语句 SET ANSI_NULL_DFLT_ON 。
参考链接:http://www.yesky.com/imagesne...
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答937 阅读✓ 已解决
PDO::FETCH_ASSOC
指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回