laravel 框架原生 select 报错

2021-06-04 15:04:53 +08:00
 570956418

前言

使用的 docker 环境,PHP7.4,PHP 的 sqlsrv,pdo_sqlsrv,odbc,pdo_odbc 扩展已将安装。

遇到的问题

我使用 DB::connection('')->select()就会报错

报错信息:SQLSTATE[IMSSP]: Field 13 returned no data. (SQL: select top 1 * from tbl_mpay_order with(nolock) where id = 1000 )

我使用 DB::connection('')->update(),执行修改语句,就不会报错,也能正确修改。

我使用原生 pdo 连接进行查询,就不会报错。代码如下
	try{
            $env = env('APP_ENV');
            $dbHost = env('SRV_DB_HOST');
            $dbUser = env('SRV_DB_USERNAME');
            $dbPwd = env('SRV_DB_PASSWORD');
            $dbName = "gameplane";
            if(!empty($dbHost) && !empty($dbUser) && !empty($dbPwd)){
                $dbName = "sqlsrv:Server={$dbHost};Database={$dbName}";
                $db = new \PDO($dbName, $dbUser, $dbPwd);
            }
            $sql = " select * from t_alipay_packet with(nolock) where  packetType = 1 ";
            $stmt = $db->query($sql);
            $res = $stmt->fetch(\PDO::FETCH_ASSOC);
            echo '<pre>';
            print_r($res);
            return;
        }catch (\Exception $e){
            echo '<pre>';
            print_r($e->getMessage());
            return;
        }
1886 次点击
所在节点    PHP
9 条回复
PeterYang1996
2021-06-04 15:24:04 +08:00
没看懂,你报错的语句和 pdo 查询的语句都不一样
570956418
2021-06-04 15:47:46 +08:00
最下面的一大段代码,是我能正常执行的,我是想说 pdo_sqlsrv 扩展是装好了。
报错信息里面的 sql 你可以忽略,SQL 是没问题的,最主要的是 select 总是报 SQLSTATE[IMSSP]: Field 13 returned no data,这个错误。不知道怎么回事
batyu
2021-06-04 15:58:30 +08:00
看起来像是把 laravel 中的 select 管道当作查询函数使用了...

查询部分字段:DB::connection('')->table("table_name")->select("字段 1", "字段 2", "字段 3")->find(1000)
查询所有字段:DB::connection('')->table("table_name")->find(1000)
570956418
2021-06-04 16:08:47 +08:00
@batyu 使用你说的方法还是报同样的错误。
SQLSTATE[IMSSP]: Field 13 returned no data. (SQL: select top 1 * from [tbl_mpay_order] where [id] = 1000)
batyu
2021-06-04 16:26:14 +08:00
多少年不用 sqlserver 了,查了一下,看到说 IMSSP 是驱动引起的错误:

[For errors that originate from the Microsoft Drivers for PHP for SQL Server, a SQLSTATE of IMSSP]( https://docs.microsoft.com/en-us/sql/connect/php/sqlsrv-errors?view=sql-server-ver15)
570956418
2021-06-05 15:55:38 +08:00
@batyu 嗯,我看看,谢谢解答。
junler
2022-06-27 15:39:17 +08:00
你好,请问这个问题解决了吗?
youyelan9527
2022-06-27 16:44:59 +08:00
解决了吗
junler
2022-06-29 09:58:01 +08:00
@junler 问题解决了,原本 php7.4 的容器中默认装的 pdo_sqlsrv-5.10.1 版,版本换成 5.10.0 就可以了。odbc 的驱动有 13 、17 、18 三个版本的,17 这个版本 php7.4 可以用。
https://pecl.php.net/package/pdo_sqlsrv
https://docs.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos?view=sql-server-ver16

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/781379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX