[請益] PHP to SQL 2012 (sqlsrv除外)

作者: noth (唉呀我的眼睛業障重啊)   2019-10-23 15:27:43
版上各位大大午安,大家好,打給厚,胎嘎猴
情況是這樣
魯叔我一直以來都是使用Linux虛擬主機(X朵)使用PHP及MySQL的環境編寫網站
最近被要求要去另一台虛擬主機的Windows Server + SQL 2012取資料,甚至覆寫資料
一開始魯叔沒想太多,因為PHP版本太舊,就用mssql_connect,發現連不上
找了找資料,改用ODBC_connect,咦?還是連不上
會不會是SQL這端設定問題?參考了這篇文章對SQL連線的診斷 : http://bit.ly/31xyPAs
應該是能外部連線,那改試試PDO,一樣不行
看許多人用sqlsrv成功連線,無奈Linux這端的主機只能使用Cpanel做操作
再加上之前網站一直是用PHP 5.6的古董函式 mysql_query,若改為7.0+版本網站會炸裂
於是只能不斷在mssql_connect及odbc_connect來回嘗試
示意圖大概如下:
https://i.imgur.com/3o6MsI4.jpg (PHP mssql, odbc)
https://i.imgur.com/dTqcJlO.jpg (Windows ODBC, SQL Server property)
當使用mssql_connect時,錯誤訊息為:
Warning: mssql_connect(): Unable to connect to server: xxx.xx.xxx.xx in
/home2/xxxxxxxx/xxxxxx/SQLtest.php on line 9
Could not connect:
當使用odbc_connect時,也嘗試調用以下三個不同的$driver:
$driver = '{SQL Server Native Client 11.0}';
$driver = '{SQL Server Native Client 10.0}';
$driver = '{SQL Server}';
$server = 'xxx.xx.xxx.xx';
$database = 'TEST';
$user = 'sa';
$password = '123';
$connection =
odbc_connect("Driver=$driver;Server=$server;Database=$database;", "$user",
"$password");
錯誤訊息長的差不多:
Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib
'SQL Server' : file not found, SQL state 01000 in SQLConnect in
/home2/xxxxxxxx/xxxxxx/SQLtest.php on line 25
Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib
'SQL Server Native Client 10.0' : file not found, SQL state 01000 in SQLConnect in
/home2/xxxxxxxx/xxxxxx/SQLtest.php on line 25
Warning: odbc_connect(): SQL error: [unixODBC][Driver Manager]Can't open lib
'SQL Server Native Client 11.0' : file not found, SQL state 01000 in SQLConnect in
/home2/xxxxxxxx/xxxxxx/SQLtest.php on line 25
嘗試使用odbc的時候:
$driver='{ODBC Driver 11 for SQL Server}';
$dsn='xxx.xx.xxx.xx';
$hostname='server';
$database='TEST';
$username='sa';
$password='123';
$conn = new PDO("odbc:$dns");
$conn = new PDO("dblib:host=$hostname;dbname=$database", $username,$password);
$conn = new PDO("sqlsrv:Server=$hostname;Database=$database", $username,
$password);
$conn = new PDO("odbc:Driver=$driver;Server=$hostname;Database=$database",
$username, $password);
錯誤訊息為:
Notice: Undefined variable: dns in /home2/xxxxxxxx/xxxxxx/SQLtest.php on
line 36
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IM002]
SQLConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no
default driver specified' in /home2/xxxxxxxx/xxxxxx/SQLtest.php:36 Stack
trace: #0 /home2/xxxxxxxx/xxxxxx/SQLtest.php(36): PDO->__construct('odbc:')
#1 {main} thrown in /home2/xxxxxxxx/xxxxxx/SQLtest.php on line 36
mssql_connect的錯誤訊息很單純,就連不上
odbc_connect的錯誤訊息比較豐富點,無法找到lib
而PDO odbc的錯誤訊息,似乎在說Driver不對應
看很多文章都說改用sqlsrv,去微軟下載sqlsrv driver,安裝到PHP資料夾,再改用
sqlsrv就可以成功連線SQL,問題在於虛擬主機沒有這樣操作的空間
在這問題上打轉了兩個多星期,希望版友們能指點魯叔一二,若有其它資訊不足的部分也
望請各位不吝指教,魯叔會儘可能補全供各位參考。
作者: lhsieh (不要問)   2019-10-23 23:37:00
google pdo sqlsrv
作者: bakedgrass (蒙古烤小草)   2019-10-24 05:16:00
你的cpanel沒有終端機給你輸入指令或是安裝extension的權限嗎
作者: powyo (光子郎)   2019-10-24 16:14:00
mssql的帳密是否只允許本機存取
作者: ri3567 (阿小)   2019-10-24 16:55:00
用phpinfo() 看一下 sqlsrv 或 odbc 有沒裝好?
作者: bakedgrass (蒙古烤小草)   2019-10-25 02:07:00
那就是沒辦法了。因為我的主機商倒是允許這麼做XD
作者: gname ((′口‵)↗︴<><...<><)   2019-11-05 15:58:00
我是用sqlsrv_connect

Links booklink

Contact Us: admin [ a t ] ucptt.com