|

php-pdo 用 ODBC 连接 MSSQLSERVER Y也是怪麻烦的:SQLSTATE[08001] SQLDriverConnect: 10054 [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746
SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]
Data source name not found and no default driver specified
SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]
Can't open lib '/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1' : file not found
SQLSTATE[08001] SQLDriverConnect: 10054 [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider:
Error code 0x2746
SQLSTATE[08001] SQLDriverConnect: 10054 [Microsoft][ODBC Driver 18 for SQL Server]
TCP Provider: Error code 0x2746
$serverName = "xpvbxvmdad,1433";
$databaseName = "master";
$uid = "sa";
$pwd = "wtfffffffffffffffff";
$conn=new PDO("odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};Server=$serverName;Database=$databaseName",$uid,$pwd);
语法似乎都对了, 可还是连不上。
<?php
//&#34;10.150.1.88:1433\\MSSQLSERVER&#34;;
$DB_HOST = &#34;10.150.1.88,1433&#34;;
//$DB_HOST = &#34;localhost,1433&#34;;
$DB_NAME = &#34;db_wchar&#34;;
$DB_CHARSET = &#34;utf8&#34;;
$DB_USER = &#34;sa&#34;;
$DB_PASSWORD = &#34;wtfwtfwtf&#34;;
// CONNECTING
try {
//$dsn = new PDO( &#34;sqlsrv:Server=$DB_HOST; Database=$DB_NAME; &#34;, $DB_USER, $DB_PASSWORD );
$dsn = new PDO(&#34;odbc:driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1};
Server=$DB_HOST; Database=$DB_NAME;&#34; , $DB_USER, $DB_PASSWORD );
}
catch (PDOException $e) {
echo &#34; yuck! Failed to get DB handle: &#34; . $e->getMessage() . &#34;\n&#34;;
exit;
}
$sql_string = $dsn->prepare(&#34;select top 10 id from table&#34;);
$sql_string->execute();
while ($row = $sql_string->fetch()) {
print_r($row);
}
unset($dsn); unset($sql_string);
?>
# ls -la /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1
-rwxr-xr-x 1 root root 2061248 Jun 23 14:23
/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1
ODBC 驱动的绝对路径都写了
$dsn = new PDO(&#34;odbc:driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1};
据说,关键字的 等号前后不能有空格。这也会影响。
Array ( [0] => dblib [1] => mysql [2] => odbc [3] => sqlite [4] => sqlsrv )
Caught PDO exception:
SQLSTATE[08001] SQLDriverConnect: 0 [Microsoft][ODBC Driver 17 for SQL Server]Neither DSN nor SERVER keyword supplied
https://stackoverflow.com/questions/46062779/neither-dsn-nor-server-keyword-supplied
好吧。把空格干掉。
还是不行:
Caught PDO exception:
SQLSTATE[08001] SQLDriverConnect: -1 [Microsoft][ODBC Driver 17 for SQL Server]
SSL Provider: [error:0A000102:SSL routines::unsupported protocol]
换个驱动? 11 版?
$conn=new PDO(&#34;odbc:DRIVER={ODBC Driver 11 for SQL Server}; server=$serverName; Database=$databaseName; Encrypt=No;&#34;, $uid, $pwd);Caught PDO exception:
SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]Can&#39;t open lib &#39;/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0&#39; : file not found
<hr/>碰到这个问题的人似乎不少。
https://github.com/microsoft/msphpsql/issues/252
TCP Provider: Error code 0x2746. Client unable to establish connection. #252
用相同的凭证从相同的网络服务器连接到相同的数据库,并使用nodejs mssql模块确实可以工作,
所以这不是一个防火墙问题。
是的, 俺用 PYTHON 的 PYMSSQL 从相同的电脑连接到相同的数据库确实可以工作,
排除了防火墙的问题。
附录: 防火墙命令
To display all services, type:
$ sudo firewall-cmd --get-services
Allow inbound traffic
To allow inbound traffic for mssql service, type:
$ sudo firewall-cmd --zone=public --add-service=mssql
To verify the services added:
$ sudo firewall-cmd --zone=public --list-services
To persist the change even after a reboot, invoke the --permanent option as follows.
$ sudo firewall-cmd --zone=public --add-service=https --permanent
To make the changes come into effect, reload the firewalld
$ sudo firewall-cmd --reload
To remove a service from the firewall, use the --remove option
$ sudo firewall-cmd --zone=public --remove-service=https --permanent
<hr/>好吧, 退一步。
用微软的示范代码。
https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16
<?php
try {
$serverName = &#34;yourServername&#34;;
$databaseName = &#34;yourDatabase&#34;;
$uid = &#34;yourUsername&#34;;
$pwd = &#34;yourPassword&#34;;
$conn = new PDO(&#34;sqlsrv:server = $serverName; Database = $databaseName;&#34;, $uid, $pwd);
// Select Query
$tsql = &#34;SELECT @@Version AS SQL_VERSION&#34;;
// Executes the query
$stmt = $conn->query($tsql);
} catch (PDOException $exception1) {
echo &#34;<h1>Caught PDO exception:</h1>&#34;;
echo $exception1->getMessage() . PHP_EOL;
echo &#34;<h1>PHP Info for troubleshooting</h1>&#34;;
phpinfo();
}
?>
<h1> Success Results : </h1>
<?php
try {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row[&#39;SQL_VERSION&#39;] . PHP_EOL;
}
} catch (PDOException $exception2) {
// Display errors
echo &#34;<h1>Caught PDO exception:</h1>&#34;;
echo $exception2->getMessage() . PHP_EOL;
}
unset($stmt);
unset($conn);
?>
还是不行啊。
Caught PDO exception:
SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746

如果端口号出错, 提示也是不同的:
SQLSTATE[HYT00] SQLDriverConnect: 0 [Microsoft]
[ODBC Driver 18 for SQL Server]Login timeout expired
$serverName = &#34;xpvbxvmdad,14333&#34;;
$conn=new PDO(&#34;odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};Server=$serverName;Database=$databaseName&#34;,$uid,$pwd);
//$conn=new PDO(&#34;odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes&#34;,$uid,$pwd);
if the port number is set wrong on purpose, the result will be different
$serverName = &#34;10.150.1.172,14333&#34;;
as following:
Caught PDO exception:
SQLSTATE[HYT00]: [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired
装了 LINUX 版本的 SQL SERVER 也是不行。
https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16
[root@dad5600 ~]# curl -o /etc/yum.repos.d/mssql-server.repo
https://packages.microsoft.com/config/rhel/8/mssql-server-preview.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 240 100 240 0 0 979 0 --:--:-- --:--:-- --:--:-- 983
[root@dad5600 ~]# dnf install -y mssql-server
packages-microsoft-com-mssql-server-preview 16 kB/s | 3.0 kB 00:00
Dependencies resolved.
=======================================================================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================================================================
Installing:
mssql-server x86_64 16.0.600.9-2 packages-microsoft-com-mssql-server-preview 518 M
Transaction Summary
=======================================================================================================================================================================
Install 1 Package
Total download size: 518 M
Installed size: 1.5 G
Downloading Packages:
mssql-server-16.0.600.9-2.x86_64.rpm 56 MB/s | 518 MB 00:09
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
[root@dad5600 ~]# /opt/mssql/bin/mssql-conf setup
Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID) - CPU Core utilization restricted to 20 physical/40 hyperthreaded
7) Enterprise Core (PAID) - CPU Core utilization up to Operating System Maximum
8) I bought a license through a retail sales channel and have a product key to enter.
Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=2109348&clcid=0x409
Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.
Enter your edition(1-8): 1
The license terms for this product can be found in
/usr/share/doc/mssql-server or downloaded from:
https://go.microsoft.com/fwlink/?LinkId=2104078&clcid=0x409
The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x409
Enter the SQL Server system administrator password:
Confirm the SQL Server system administrator password:
Configuring SQL Server...
This is an evaluation version. There are [83] days left in the evaluation period.
This program has encountered a fatal error and cannot continue running at Sat Aug 27 12:03:56 2022
The following diagnostic information is available:
Reason: Fatal Signal (0x00000001)
Signal: SIGSEGV - Segmentation fault (11)
...... 【F*CK】
[root@dad5600 ~]# systemctl status mssql-server
○ mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://docs.microsoft.com/en-us/sql/linux
[root@dad5600 ~]# systemctl enable mssql-server
Created symlink /etc/systemd/system/multi-user.target.wants/mssql-server.service → /usr/lib/systemd/system/mssql-server.service.
[root@dad5600 ~]# systemctl start mssql-server
[root@dad5600 ~]# systemctl status mssql-server
● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2022-08-27 12:04:42 PDT; 3s ago
Docs: https://docs.microsoft.com/en-us/sql/linux
Main PID: 90370 (sqlservr)
Tasks: 188
Memory: 1.9G
CPU: 3.983s
CGroup: /system.slice/mssql-server.service
├─ 90370 /opt/mssql/bin/sqlservr
└─ 90372 /opt/mssql/bin/sqlservr
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Instance Id: 393ccc42-e06c-4ae8-8178-32badd748f11
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Crash Id: ee971ad6-3d29-45d5-84a1-a18da199c788
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Build stamp: 149da8bf27e9ab44477e9c18a50f75c9f725b52324d5027357628168eb286bbd
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Distribution: Fedora Linux 36 (Workstation Edition)
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Processors: 32
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Total Memory: 134990884864 bytes
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Timestamp: Sat Aug 27 12:04:44 2022
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Last errno: -34938881
Aug 27 12:04:44 dad5600.localdomain sqlservr[90372]: Last errno text: Unknown error -34938881
Aug 27 12:04:44 dad5600.localdomain sqlservr[90370]: Capturing a dump of 90372
[root@dad5600 ~]#
[root@dad5600 ~]# sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
FirewallD is not running
[root@dad5600 ~]#
[root@dad5600 ~]# sudo firewall-cmd --reload
FirewallD is not running
[root@dad5600 ~]#
[root@dad5600 ~]# curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 192 100 192 0 0 652 0 --:--:-- --:--:-- --:--:-- 650
[root@dad5600 ~]# dnf install -y mssql-tools unixODBC-devel
Repository packages-microsoft-com-prod is listed more than once in the configuration
packages-microsoft-com-prod 12 kB/s | 3.0 kB 00:00
Package unixODBC-devel-2.3.9-5.fc36.x86_64 is already installed.
Dependencies resolved.
=======================================================================================================================================================================
Package Architecture Version Repository Size
=======================================================================================================================================================================
Installing:
mssql-tools x86_64 17.10.1.1-1 packages-microsoft-com-prod 291 k
Transaction Summary
=======================================================================================================================================================================
Install 1 Package
Total download size: 291 k......
[root@dad5600 ~]# echo &#39;export PATH=&#34;$PATH:/opt/mssql-tools/bin&#34;&#39; >> ~/.bash_profile
[root@dad5600 ~]#
[root@dad5600 ~]# sqlcmd -S localhost -U sa
Password:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific
error has occurred while establishing a connection to SQL Server.
Server is not found or not accessible. Check if instance name is correct and if SQL Server
is configured to allow remote connections. For more information see SQL Server Books Online..
[root@dad5600 ~]#
<hr/>
据说, 是 SSL 的问题.....
[root@m4800linux ~]# ls /usr/lib64/libcrypto.so
/usr/lib64/libcrypto.so
[root@m4800linux ~]# ls /opt/mssql-tools
[root@m4800linux ~]# ls /opt/mssql-tools/share/resources/en_US/
[root@m4800linux ~]# ln -s /usr/lib64/libssl.so.1.1 /opt/microsoft/msodbcsql18/lib64/libssl.so
[root@m4800linux ~]# ln -s /usr/lib64/libcrypto.so.1.1 /opt/microsoft/msodbcsql18/lib64/libcrypto.so
其实就是猎巫。 连 /etc/ssl/openssl.cnf 都修改了, 降低 SSL /TLS 的版本, 无用
# gedit /etc/ssl/openssl.cnf
REF
https://stackoverflow.com/questions/57265913/error-tcp-provider-error-code-0x2746-during-the-sql-setup-in-linux-through-te
How to fix Microsoft ODBC Driver 17 for SQL Server :
SSL Provider ssl_choose_client_version:unsupported protocol
https://askubuntu.com/questions/1284658/how-to-fix-microsoft-odbc-driver-17-for-sql-server-ssl-provider-ssl-choose-cli/1289910#1289910
<hr/>
$ TDSVER=7.0 tsql -H 10.150.1.172 -p 1433 -U sa
Password:
locale is &#34;en_US.UTF-8&#34;
locale charset is &#34;UTF-8&#34;
using default charset &#34;UTF-8&#34;
1> help
2> ?
3> quit
$ TDSVER=7.0 tsql -H 10.150.1.172 -p 1433 -U sa
Password:
locale is &#34;en_US.UTF-8&#34;
locale charset is &#34;UTF-8&#34;
using default charset &#34;UTF-8&#34;
Msg 18456 (severity 14, state 1) from VB0XP Line 1:
&#34;用户 &#39;sa&#39; 登录失败。&#34;
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
ref:
https://stackoverflow.com/questions/31818839/php-pdo-error-sqlstatehy000-unable-to-connect-adaptive-server-is-unavailable
Caught PDO exception:
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (127.0.0.1) (severity 9)
Caught PDO exception:
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (127.0.0.1)
(severity 9)
<hr/>
https://stackoverflow.com/questions/20163776/connect-php-to-mssql-via-pdo-odbc
https://stackoverflow.com/questions/31818839/php-pdo-error-sqlstatehy000-unable-to-connect-adaptive-server-is-unavailable
https://stackoverflow.com/questions/37205752/sqlstate01002-adaptive-server-connection-failed-severity-9
<?php
print_r(PDO::getAvailableDrivers());
try {
$serverName = &#34;localhost:3306&#34;;
$databaseName = &#34;wp_db&#34;;
$uid = &#34;root&#34;;
$pwd = &#34;WTFPLisWTFPL&#34;;
$conn = new PDO(&#34;mysql:host = $serverName; dbname = $databaseName&#34;, $uid, $pwd);
// Select Query
$tsql = &#34;SELECT @@Version AS SQL_VERSION&#34;;
// Executes the query
$stmt = $conn->query($tsql);
} catch (PDOException $exception1) {
echo &#34;<h1>Caught PDO exception:</h1>&#34;;
echo $exception1->getMessage() . PHP_EOL;
echo &#34;<h1>PHP Info for troubleshooting</h1>&#34;;
phpinfo();
}
?>
<h1> Success Results : </h1>
<?php
try {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row[&#39;SQL_VERSION&#39;] . PHP_EOL;
}
} catch (PDOException $exception2) {
// Display errors
echo &#34;<h1>Caught PDO exception:</h1>&#34;;
echo $exception2->getMessage() . PHP_EOL;
}
unset($stmt);
unset($conn);
?>
Array ( [0] => dblib [1] => firebird [2] => mysql [3] => odbc [4] => sqlite [5] => sqlsrv )
Success Results :
10.5.16-MariaDB

mysql/mariadb 毫不费力就登上了。
<hr/>
$conn=new PDO(&#34;odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes;&#34;,$uid,$pwd);
$conn=new PDO(&#34;odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes;&#34;,$uid,$pwd);
*** 的, 即使用最新的驱动也不行。
Array ( [0] => mysql [1] => odbc [2] => sqlite [3] => sqlsrv )
Caught PDO exception:
SQLSTATE[08001] SQLDriverConnect: -1 [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol][error:0A0000C7:SSL routines::peer did not return a certificate]
反正俺已经打算放弃了。
[root@dad5600 ~]# nmap --script ssl-enum-ciphers 10.150.1.16
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-27 14:15 PDT
Nmap scan report for 10.150.1.168
Host is up (0.000066s latency).
Not shown: 993 closed tcp ports (reset)
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
1433/tcp open ms-sql-s
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp384r1) - F
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - F
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 1024) - F
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 1024) - F
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 1024) - F
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| Insecure certificate signature (SHA1), score capped at F
|_ least strength: F
3389/tcp open ms-wbt-server
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp384r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.1:
| ciphers:
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp384r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
| TLSv1.2:
| ciphers:
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
| TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp384r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp384r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp384r1) - A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
| warnings:
| 64-bit block cipher 3DES vulnerable to SWEET32 attack
|_ least strength: C
4000/tcp open remoteanything
5357/tcp open wsdapi
MAC Address: 00:0C:29:12:34:56 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 25.66 seconds
<hr/>当俺发现 微软自己的 GUI 工具也连不上的时候, 俺释然了。 这不是俺的人品问题。

<hr/>
pdo 不给力。
要不要试试 ODBC unified , ODBC (Unified) ?
这个例子是 WINDOWS 的, 不适用。
<?php
// Microsoft SQL Server using the SQL Native Client 10.0 ODBC Driver - allows connection to SQL 7, 2000, 2005 and 2008
$connection = odbc_connect(&#34;Driver={SQL Server Native Client 10.0};Server=$server;Database=$database;&#34;, $user, $password);
// Microsoft Access
$connection = odbc_connect(&#34;Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename&#34;, $user, $password);
// Microsoft Excel
$excelFile = realpath(&#39;C:/ExcelData.xls&#39;);
$excelDir = dirname($excelFile);
$connection = odbc_connect(&#34;Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=$excelFile;DefaultDir=$excelDir&#34; , &#39;&#39;, &#39;&#39;);
?>
REF:
https://www.php.net/manual/en/book.uodbc.php
<hr/>
ldconfig 命令
使用ldconfig命令来创建、更新和删除必要的链接和缓存(供运行时链接器ld.so使用),
以便在命令行上指定的目录、文件/etc/ld.so.conf和可信目录(/usr/lib、/lib64和/lib)中找到最新的共享库。
ldconfig命令在确定哪些版本的链接应该被更新时,会检查它所遇到的库的头和文件名。
这个命令还创建了一个叫做/etc/ld.so.cache的文件,用来加快链接速度。
【未完待续】 |
|