查看: 138|回复: 0

php-pdo 用 ODBC 连接 MSSQLSERVER Y也是怪麻烦的 ...

[复制链接]

3

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-9-20 12:02:31 | 显示全部楼层 |阅读模式

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

//"10.150.1.88:1433\\MSSQLSERVER";
$DB_HOST = "10.150.1.88,1433";
//$DB_HOST = "localhost,1433";
$DB_NAME = "db_wchar";
$DB_CHARSET = "utf8";
$DB_USER = "sa";
$DB_PASSWORD = "wtfwtfwtf";

// CONNECTING

try {
     //$dsn = new PDO( "sqlsrv:Server=$DB_HOST; Database=$DB_NAME; ", $DB_USER,  $DB_PASSWORD );  
     $dsn = new PDO("odbc:driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1};
     Server=$DB_HOST; Database=$DB_NAME;" , $DB_USER, $DB_PASSWORD );
    }
catch (PDOException $e) {
    echo " yuck! Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
  }

$sql_string = $dsn->prepare("select top 10 id from table");
$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("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("odbc:DRIVER={ODBC Driver 11 for SQL Server}; server=$serverName; Database=$databaseName; Encrypt=No;", $uid, $pwd);Caught PDO exception:

SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0' : 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 = "yourServername";
    $databaseName = "yourDatabase";
    $uid = "yourUsername";
    $pwd = "yourPassword";
   
    $conn = new PDO("sqlsrv:server = $serverName; Database = $databaseName;", $uid, $pwd);

    // Select Query
    $tsql = "SELECT @@Version AS SQL_VERSION";

    // Executes the query
    $stmt = $conn->query($tsql);
} catch (PDOException $exception1) {
    echo "<h1>Caught PDO exception:</h1>";
    echo $exception1->getMessage() . PHP_EOL;
    echo "<h1>PHP Info for troubleshooting</h1>";
    phpinfo();
}

?>

<h1> Success Results : </h1>

<?php
try {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['SQL_VERSION'] . PHP_EOL;
    }
} catch (PDOException $exception2) {
    // Display errors
    echo "<h1>Caught PDO exception:</h1>";
    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 = "xpvbxvmdad,14333";

    $conn=new PDO("odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};Server=$serverName;Database=$databaseName",$uid,$pwd);
    //$conn=new PDO("odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes",$uid,$pwd);
if the port number is set wrong on purpose, the result will be different

    $serverName = "10.150.1.172,14333";


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 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.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 "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> help
2> ?
3> quit

$ TDSVER=7.0 tsql -H 10.150.1.172 -p 1433 -U sa
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Msg 18456 (severity 14, state 1) from VB0XP Line 1:
        "用户 'sa' 登录失败。"
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 = "localhost:3306";
    $databaseName = "wp_db";
    $uid = "root";
    $pwd = "WTFPLisWTFPL";
   
    $conn = new PDO("mysql:host = $serverName; dbname = $databaseName", $uid, $pwd);

    // Select Query
    $tsql = "SELECT @@Version AS SQL_VERSION";

    // Executes the query
    $stmt = $conn->query($tsql);
} catch (PDOException $exception1) {
    echo "<h1>Caught PDO exception:</h1>";
    echo $exception1->getMessage() . PHP_EOL;
    echo "<h1>PHP Info for troubleshooting</h1>";
    phpinfo();
}

?>

<h1> Success Results : </h1>

<?php
try {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['SQL_VERSION'] . PHP_EOL;
    }
} catch (PDOException $exception2) {
    // Display errors
    echo "<h1>Caught PDO exception:</h1>";
    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("odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes;",$uid,$pwd);

$conn=new PDO("odbc:DRIVER={/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.1.1};server=$serverName;Database=$databaseName;Encrypt=Yes;",$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("Driver={SQL Server Native Client 10.0};Server=$server;Database=$database;", $user, $password);

// Microsoft Access
$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $password);

// Microsoft Excel
$excelFile = realpath('C:/ExcelData.xls');
$excelDir = dirname($excelFile);
$connection = odbc_connect("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=$excelFile;DefaultDir=$excelDir" , '', '');
?>


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的文件,用来加快链接速度。

【未完待续】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表