DirectAdmin、多个 PHP 版本和 MSSQL

问题描述

过去,我使用 MSsql 函数建立了与 MSsql 的连接。我有一个运行 PHP 5.5 的旧站点(客户端拒绝升级),遗憾的是这些功能丢失了(它可以正常工作,但现在不能)

我尝试使用下面的脚本重新安装,但在执行 PHP -m 时仍然无法显示模块

Download FreeTDS
Latest stable version can be found here http://www.ibiblio.org/pub/Linux/ALPHA/freetds/stable/ (

3. Configure and install FreeTDS
Uncompress and cd to the respective folder:

./configure --prefix=/usr/local/freetds
make
make install

4. PHP configuration
Edit the PHP configuration file.
"/usr/local/directadmin/custombuild/configure/ap2/configure.PHP55" 
Add this line: "--with mssql=/usr/local/freetds\ " 

Go to custombuild:
./build clean
./build PHP_expert 5.5 PHP-fpm

再次执行 PHP - m 时,模块没有显示

[root@... domains]# PHP -m
[PHP Modules]
bcmath
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
intl
json
libxml
mbstring
mcrypt
mhash
MysqL
MysqLi
MysqLnd
openssl
pcre
PDO
pdo_MysqL
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
sockets
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zip
zlib

[Zend Modules]

[root@... domains]#

有什么建议吗?

解决方法

我记得 mssql 函数何时消亡。这是悲伤的一天,让我很头疼。

我发现最简单的转换是移至 sqlsrv 函数。它们的语法和结构几乎相同,只需要进行一些调整。幸运的是,从 IDE 进行文件范围的搜索应该可以很容易地找到任何 mssql 命令,并就地“转换”它们。

连接函数有点不同,因为它使用参数数组来指定数据库、用户名、密码等,但这些都有详细的文档说明,您只需要在建立连接的地方更改它们(这通常只在一个地方编码)。但大部分操作功能基本相同。

需要注意的一点是,sqlsrvmssql 更与指针相关。您可以使用提供的函数(以及它们在 php.net 上的示例)进行调整以推进记录,如果您只添加 { {1}} 常量作为 SQLSRV_FETCH_ASSOC 的第二个参数。这将导致它模拟旧行为,并消除使用指针相关函数的需要。

sqlsrv_fetch_array

当我转换自己的代码时,这大大简化了任务。后来,我重建了我的数据库类以使用 $connection = sqlsrv_connect( $server,$connection_info_array ); $results = sqlsrv_query( $connection,$your_query ); while ( $row = sqlsrv_fetch_array( $results,SQLSRV_FETCH_ASSOC ) ) { var_dump( $row ); } ,但临时迁移到 PDO 节省了我当时没有的大量时间。