簡體   English   中英

從 Ubuntu 到 SQL 服務器的 PHP ODBC 連接

[英]PHP ODBC Connection to a SQL server from Ubuntu

我的主機是 ubuntu 機器 20.04 我使用的是 PHP 7.4 並安裝了PDO_ODBC

目標是能夠訪問在 ubuntu 機器上使用 Windows 憑據的 SQL 數據庫。

這是我的/etc/odbc.ini文件:

[msodbcsql]
Description=SQL Server driver
Driver=/usr/lib/libmsodbcsql-17.so

[pds_database]
Driver=msodbcsql
Description=PDS database access
Server=<server ip>\PDS
Port=1433

當我運行tsql -S pds_database -U <domain>\\\\<user> -P<passqord>我得到這個提示: 1>

我認為我的pds_database連接設置正確......

現在,這是我的 PHP 代碼:

$db = new PDO ("odbc:pds_database", '<domain>\\<user>', '<password>');

我收到以下錯誤異常:

"SQLSTATE[IM002] SQLConnect: 0 [unixODBC][Driver Manager]Data source name not found and no default driver specified"

你知道我在這個連接過程中錯過了什么嗎?

PS: /usr/lib/libmsodbcsql-17.so/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.7.so.2.1的符號鏈接是什么意思我正在運行像我的 PHP 一樣的libmsodbcsql 64 位

我和你有完全一樣的問題

我將分享我關於連接 .php 的完整代碼

<?php

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// define variables;
/* $servername = "";
$username = "";
$password = "";
$dbname = ""; */

// Create connection
try {

    // THIS IS OLD WRONG CODE, PLEASE CHECK BELOW
    $DSN = 'odbc:Driver={ODBC Driver 17 for SQL Server};
        Server=192.168.X.X,1234\\MSSQLSERVER;Database=db_um_1699;
        Trusted_Connection=yes';

    $dbconn = new PDO($DSN, 'username', 'userPassword');
    
    $dbconn -> setattribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $dbconn -> setattribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    "BRIDGE BUILD! \n <hr />";// Check connection

}catch (PDOException $e) {
    echo "Broke: ". $e->getMessage();
}

但是我仍然使用舊的連接方式,這是一個混亂且難以操作的方式。


12-16-2021 編輯:

我已將odbc:driver更改為odbc:FreeTDS有效!

首先假設我們都有 odbc 驅動程序; 我們需要編輯/etc/odbcinst.ini odbc.ini文件

[FreeTDS]
Description = ODBC for FreeTDS
Driver64    = /usr/lib64/libtdsodbc.so
Setup64     = /usr/lib64/libtdsodbc.so
FileUsage   = 1

接下來嘗試建立連接:

// Create connection
try {

    // CHANGE ODBC to FREETDS
    $DSN = 'odbc:Driver={FreeTDS};
        Server=192.168.X.X,1234\\MSSQLSERVER;Database=db_um_1699;
        Trusted_Connection=yes';

    $dbconn = new PDO($DSN, 'username', 'userPassword');
    
    $dbconn -> setattribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $dbconn -> setattribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    "BRIDGE BUILD! \n <hr />";// Check connection

}catch (PDOException $e) {
    echo "Broke: ". $e->getMessage();
}

希望這些信息是我遇到同樣問題的任何人

但這對於所有類似的問題可能仍然不夠好,因為我們的數據庫確實老化了MS-sql-2008

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM