以上就是给各位分享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数据并显示)
- 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 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 项目安装、配置和测试了 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 不工作
我想用 sqlsrv 连接数据库,它可以连接但查询不起作用,我试过这个命令
if(DB::connection()->getDatabaseName())
{
echo "Yes! successfully connected to the DB: " . DB::connection()->getDatabaseName();
} else {
echo "not connected";
}
$loginData = DB::select("exec appLogin @userName = ''".$request->email."'',@password = ''".$request->password."''");
$loginData = DB::select("select * from [User]");
echo ''<pre>'';
print_r($loginData);
die;
为此,我收到了数据库连接的成功响应,但是当我尝试 DB:select 命令时,我收到此错误
[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 项目,开发在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 扩展
小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库
步骤如下:
源码编译安装
# 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 扩展等更多相关知识的信息可以在本站进行查询。
本文标签: