GVKun编程网logo

PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行(php查询sql数据并显示)

1

以上就是给各位分享PHP5.4到7.4mssql到sqlsrvsql查询未运行,其中也会对php查询sql数据并显示进行解释,同时本文还将给你拓展Laravel-InvalidArgumentExce

以上就是给各位分享PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行,其中也会对php查询sql数据并显示进行解释,同时本文还将给你拓展Laravel - InvalidArgumentException 数据库连接 [sqlsrv] 未配置、laravel sqlsrv db 连接有效,但 db::select 不工作、laravel ubuntu redis sqlsrv、lnmp 环境里安装 mssql 及 mssql 的 php 扩展等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行(php查询sql数据并显示)

PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行(php查询sql数据并显示)

如何解决PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行

一点前言 我是一年级的系统管理员,我一直在迁移服务器以使这家公司保持最新状态。我遇到了一个运行 PHP 5.4 的服务器,我正试图将它移动到 PHP 7.4。一切最初都是用 mssql 编写的,我将其移至 sqlsrv。我有连接工作。我可以成功执行一些查询,但是我无法让为 mssql 编写的这些查询与 sqlsrv 一起使用。

我知道的事情:

  • $record 以数组形式返回,我使用 gettype 对其进行了测试。
  • $conn 之所以有效,是因为我可以通过简单的查询从数据库中查询表。

sql 查询在 sql server 中正确运行。

任何建议将不胜感激,因为我感觉我需要重写整个脚本,因为我已经为此苦苦挣扎了几天。下面的代码片段只是内置于 if else 链中的众多查询之一。

用PHP 5.4编写的原始代码:

$query = "Select * INTO #temptable FROM (
    SELECT Employee,transdate,sum([RegHrs]) as RegHrs,sum([OvtHrs]) as OvtHrs
    
    FROM [dbo].[tkDetail]
    WHERE TransDate >= cast(''" . $startdate . "'' as datetime) and TransDate <= cast(''" . $enddate . "'' as datetime)
    GROUP BY Employee,transdate) as x

    SELECT LastName,FirstName,emmain.Employee,emcom.PayType,cast(data.TransDate as date) as TransDate,data.reghrs,data.ovthrs
    from dbo.emmain emmain
    Left Join #temptable data on emmain.employee = data.employee
    Left Join dbo.EMCompany emcom on emmain.employee = emcom.employee
    Left Join dbo.EmployeeCustomTabFields custom on emmain.employee = custom.employee
    WHERE custom.custFullTimePartTime = ''Full Time'' and emcom.status = ''A''
    ";
    $result = mssql_query($query);
    while ( $record = mssql_fetch_array($result) ) {
        // BUGFIX: Salary reporting shows no regular hour entry as null instead of 0.0
        if ($record[''reghrs''] == null) {
            $record[''reghrs''] = "0.0";
        }
        
        // BUGFIX: Salary reporting shows no overtime hour entry as null instead of 0.0
        if ($record[''ovthrs''] == null) {
            $record[''ovthrs''] = "0.0";
        }
        
        if (($record[''reghrs''] + $record[''ovthrs''] <= 4) && ($record[''reghrs''] + $record[''ovthrs''] > -1)) {
            print "\\t\\t\\t\\t\\t<tr>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''Employee''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''FirstName''] . " " . $record[''LastName''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''PayType''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . number_format((float) $record[''reghrs''],3) . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . number_format((float) $record[''ovthrs''],3) . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''TransDate''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t</tr>\\n";
            $reccount += 1;
        }
    }

我尝试做的事情:

$query = "Select * INTO #temptable FROM (
    SELECT Employee,data.ovthrs
    from dbo.emmain emmain
    Left Join #temptable data on emmain.employee = data.employee
    Left Join dbo.EMCompany emcom on emmain.employee = emcom.employee
    Left Join dbo.EmployeeCustomTabFields custom on emmain.employee = custom.employee
    WHERE custom.custFullTimePartTime = ''Full Time'' and emcom.status = ''A''
    ";

    $result = sqlsrv_query($conn,$query);
    if( $result ) {
        echo "result true";
    }else{
        echo "result false <br />";
        die( print_r( sqlsrv_errors(),true));
    }    
    while ($record = sqlsrv_fetch_array($result)) 
        {
            
        // BUGFIX: Salary reporting shows no regular hour entry as null instead of 0.0
        if ($record["reghrs"] == null) {
            $record["reghrs"] = "0.0";
        }
        
        
        // BUGFIX: Salary reporting shows no overtime hour entry as null instead of 0.0
        if ($record[''ovthrs''] == null) {
            $record[''ovthrs''] = "0.0";
        }
        
        if (($record[''reghrs''] + $record[''ovthrs''] <= 4) && ($record[''reghrs''] + $record[''ovthrs''] > -1)) {
            print "\\t\\t\\t\\t\\t<tr>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''Employee''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''FirstName''] . " " . $record[''LastName''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''PayType''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . number_format((float) $record[''reghrs''],3) . "</td>\\n";
            print "\\t\\t\\t\\t\\t\\t<td>" . $record[''TransDate''] . "</td>\\n";
            print "\\t\\t\\t\\t\\t</tr>\\n";
            $reccount += 1;
        }
    }


解决方法

我已开始使用 PDO,但我的一台服务器仍在使用 sqlsrv 函数。当我从 mssql 函数转换时,我遇到了和你一样的麻烦。

您可以使用 sqlsrv_next_result 函数移动指针(如上面的提示所述),或者您可以简单地提供一个附加参数来强制将结果作为关联数组返回。我发现标准的 while 循环的工作方式与旧函数一样,当它以这种方式完成时。

代替:

while ($record = sqlsrv_fetch_array($result))

使用:

while ($record = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC))

Laravel - InvalidArgumentException 数据库连接 [sqlsrv] 未配置

Laravel - InvalidArgumentException 数据库连接 [sqlsrv] 未配置

如何解决Laravel - InvalidArgumentException 数据库连接 [sqlsrv] 未配置

我为我的 Laravel 项目安装、配置和测试了 sql Server 驱动程序。但是当我尝试迁移数据库时,出现错误:invalidargumentexception 数据库连接 [sqlsrv] 未配置。

我在 config/database.PHP 中将 sql Server 驱动程序设置为默认驱动程序

''default'' => env(''DB_CONNECTION'',''sqlsrv ''),

以下是我的环境变量配置 (.env)

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:5Tu6X1HbeSYKPH7vMwd879mf5ka/c2IrtSTporSrFXc=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=sqlsrv
DB_HOST=DESKTOP-B07NJ22\\sqlEXPRESS
DB_PORT=1433
DB_DATABASE=StudentAPI
DB_USERNAME=sa
DB_PASSWORD=root

下面是我的数据库连接配置(config/database.PHP)

''sqlsrv '' => [
        ''driver'' => ''sqlsrv '',''url'' => env(''DATABASE_URL''),''host'' => env(''DB_HOST'',''DESKTOP-B07NJ22\\sqlEXPRESS''),''port'' => env(''DB_PORT'',''1433''),''database'' => env(''DB_DATABASE'',''StudentAPI''),''username'' => env(''DB_USERNAME'',''sa''),''password'' => env(''DB_PASSWORD'',''root''),''charset'' => ''utf8'',''prefix'' => '''',''prefix_indexes'' => true,''collation'' => ''utf8_unicode_ci'',''strict'' => false,''engine'' => null,],

在 sql Server 配置管理器中,TCP/IP 已启用并启动。在 TCP/IP 属性中,所有动态端口都为空,IPAll TCP Port 设置为 1433。

我在 PHP.ini 文件中设置了 sql Server 扩展如下:

extension=PHP_sqlsrv_80_ts_x64.dll
extension=PHP_pdo_sqlsrv_80_ts_x64.dll

人们的眼光能否超越这些配置?

laravel sqlsrv db 连接有效,但 db::select 不工作

laravel sqlsrv db 连接有效,但 db::select 不工作

如何解决laravel sqlsrv db 连接有效,但 db::select 不工作

我想用 sqlsrv 连接数据库,它可以连接但查询不起作用,我试过这个命令

  1. if(DB::connection()->getDatabaseName())
  2. {
  3. echo "Yes! successfully connected to the DB: " . DB::connection()->getDatabaseName();
  4. } else {
  5. echo "not connected";
  6. }
  7. $loginData = DB::select("exec appLogin @userName = ''".$request->email."'',@password = ''".$request->password."''");
  8. $loginData = DB::select("select * from [User]");
  9. echo ''<pre>'';
  10. print_r($loginData);
  11. die;

为此,我收到了数据库连接的成功响应,但是当我尝试 DB:select 命令时,我收到此错误

  1. [Microsoft][ODBC Driver 17 for sql Server]TCP Provider: No connection Could be made because the target machine actively refused it.

laravel ubuntu redis sqlsrv

laravel ubuntu redis sqlsrv

准备上一个老版本的laravel 项目,开发在windows上跑的,准备放到ubuntu上运行。

使用xampp-linux-x**-7.4.33-0-installer.run 安装

1 redis 

pecl install sqlsrv-5.10.0

2 sqlsrv 

sudo pecl install sqlsrv-5.10.0
sudo pecl install pdo_sqlsrv-5.10.0

phpenmod sqlsrv pdo_sqlsrv

sudo phpenmod -v 7.4 sqlsrv pdo_sqlsrv

3    /usr/lib/gcc/x86_**-linux-gnu/12/libstdc++.so.6 到 /opt/lampp/lib 

错误信息:

[18-Jul-2023 02:18:48 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library ''sqlsrv.so'' (tried: /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/sqlsrv.so (/opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.20'' not found (required by /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/sqlsrv.so)), /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/sqlsrv.so.so (/opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/sqlsrv.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[18-Jul-2023 02:18:48 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library ''pdo_sqlsrv.so'' (tried: /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so (/opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.20'' not found (required by /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so)), /opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so.so (/opt/lampp/lib/php/extensions/no-debug-non-zts-20190902/pdo_sqlsrv.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

 

原因是xampp里的lib目录里版本不对

lnmp 环境里安装 mssql 及 mssql 的 php 扩展

lnmp 环境里安装 mssql 及 mssql 的 php 扩展

小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库

步骤如下: 

源码编译安装

(1)下载 freetds-stable-0.91 源码: http://download.csdn.net/download/xhu_eternalcc/7457555(花了 4 积分,没有积分的找我要,微信 zmd1047773569)
          上传到根目录下的 download 文件中
(2)编译安装:
   # cd /download

           # tar zxvf freetds-stable.tgz(解压,)

 

   # cd freetds-0.91

   # 编译

            # ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib

            # make

            # make install

            参数解释:

            安装 freetds 到目录 /usr/local/freetds:--prefix=/usr/local/freetds

            支持 MSSQL2000:--with-tdsver=8.0 --enable-msdblib

 

配置 FreeTds 的库文件

将 freetds 的库文件所在路径配置到 LD_LIBRARY_PATH 参数中:

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/localfreetds/lib/:

或者直接把 etc/bashrc 的文件 bashrc 直接填写上  LD_LIBRARY_PATH=/usr/localfreetds/lib:$LD_LIBRARY_PATH

这么作的目的是为了避免加载 FreeTds 库文件加载不上的情况。

 

 

php 里安装 php-mssql 扩展:

cd /download (把php-mssql扩展下载到download目录里)
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz (下载扩展文件,这里要根据你环境中运行的php版本选择对应的扩展版本下载,我这里php是5.6.30的 所以php-mssql扩展下载对应的版本) tar -zxvf php-5.6.30.tar.gz cd /php-5.6.30/ext/mssql
 /usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/ 

make
&& make install

编译安装后的结果 如下图

 

同时 mssql.so 也在 php 扩展文件下生成 (如下图)

 

 

 

 把 extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mssql.so"  添加到 usr/local/php/lib/php.ini 中

 引用扩展后,重启 web 服务,通过 phpinfo 查看扩展 mssql 是否开启成功

重启 php   /usr/local/php/sbin/php-fpm reload  

重启 nginx  进入 nginx 可执行目录 sbin 下,输入命令./nginx -s reload 即可(或者 /application/nginx/sbin/nginx -s reload)

 

 

 

今天关于PHP 5.4 到 7.4 mssql 到 sqlsrv sql 查询未运行php查询sql数据并显示的介绍到此结束,谢谢您的阅读,有关Laravel - InvalidArgumentException 数据库连接 [sqlsrv] 未配置、laravel sqlsrv db 连接有效,但 db::select 不工作、laravel ubuntu redis sqlsrv、lnmp 环境里安装 mssql 及 mssql 的 php 扩展等更多相关知识的信息可以在本站进行查询。

本文标签: