顯示具有 freetds 標籤的文章。 顯示所有文章
顯示具有 freetds 標籤的文章。 顯示所有文章

2020-04-16

ubuntu 18.4 上使用 php7 透過 FreeTDS , ODBC 連 mssql 2000

1.安裝 FreeTDS ,ODBC
sudo apt-get install freetds-bin freetds-common tdsodbc odbcinst unixodbc unixodbc-dev
sudo mv /etc/odbcinst.ini /etc/odbcinst.ini.bak
sudo cp /usr/share/tdsodbc/odbcinst.ini /etc/
2.測試 是否可連 mssql
tsql -H my_server_host -p 1433 -U my_user -P my_password -D my_database
3.安裝 php7.x odbc 如 7.2 時
sudo apt-get install php7.2-odbc
4. php 上測試
try {

//connection params
$dbCon = new PDO('odbc:Driver=FreeTDS; Server=my_server_host; Port=1433; Database=my_database; TDS_Version=8.0; ClientCharset=UTF-8', 'my_login', 'my_pass');

//test query
$result = $dbCon->query('SELECT TOP 10 * FROM dbo.my_table');

//show the results
foreach ($result as $row)
{
print_r( $row );
}

//close the connection
$dbCon = null;

} catch (PDOException $e) {

//show exception
echo $e->getMessage();
}
其它問題: 如有 SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]Can't open cursor lib '/etc/libodbccr.so' : file not found
cd /usr/lib/x86_64-linux-gnu
sudo ln -s libodbccr.so.2 libodbccr.so

2017-11-03

php 自行編譯後,如何新增 extension,以sybase_ct 為例,並安裝freetds以連線mssql,系統為ubuntu

自行編譯時會下載 完整安裝包 , 裡面有 ext 的 資料夾,底下全是可以 新增的 Extension
安裝前要裝 freetds
sudo apt-get install freetds-dev tds-odbc libsybdb5 libct4libdbd-freetds freetds-common freetds-bin
再裝 freetds-dev (開發包)才不會出現 ctpublic.h 找不到的的錯誤
sudo apt-get install freetds-dev
完成後切換到 sybase_ct 資料夾中
cd sybase_ct
phpize
sudo ./configure --with-php-config=/www/server/php/56/bin/php-config --with-sybase-ct=shared,/usr
sudo make
sudo make install
指令說明
phpize :建立php extension 用的configure
--with-php-config= :之前編譯php時的php-config 位置,我的是在/www/server/php/56/bin/php-config
--with-sybase-ct=shared,/usr :官方bug有說明,因為 ctpublic.h 是在 /usr/include 底下,所以要這樣設才找得到 https://bugs.php.net/bug.php?id=13782

最後再到php.ini中,新增一行 
extension=完成路徑/sybase_ct.so
完整路徑會在 make install 列出

重開 apache 或重開 php-fpm

2011-01-11

在ubuntu上 adodb 用freetds 的mssql 時的bug

發現在 ubuntu 上 用 mssql 去連時,用 FetchNextObj 去抓成object  時,會沒有資料,但array 卻正常。

我使用的版本是 adodb4992.tgz:
http://sourceforge.net/projects/adodb/files/adodb-php-4-and-5/adodb-4992-for-php/adodb4992.tgz/download

要修改 adodb.inc.php底下
3504行的
$o->$n = $this->Fields($name);
 改成
//mod by loa 2011-01-10
$o->$n = $this->Fields($i);
//$o->$n = $this->Fields($name);

2010-09-27

ubuntu 10.04 要使用freetds 才能連入 mssql

因為我用 php 5.2.x 版的
所以先重裝一次 http://z-win.blogspot.com/2010/05/ubuntu-php-52x.html
最後加上
sudo apt-get install freetds-bin
sudo aptitude install -t karmic php5-sybase
#改freetds 設定(這是我自已要用的)
sudo vim /etc/freetds/freetds.conf
#在[global]加上
text size = 104857600 #大小能到100b
client charset = UTF-8 #預設utf-8
#改mssql_connect的語言
sudo vim /etc/php5/apache2/php.ini
#加入
mssql.charset = "UTF-8"
sudo /etc/init.d/apache2 restart
#test方法
tsql -H mssql.ip -p 1433 -U username
#輸入password後出現 1> 就成功了
#php



#也可以用 匿名主機 方式連入,但mssql 要sp4以上
sudo vim /etc/freetds/freetds.conf
#加入
[mssql_con1]
host = this.con1.server
port = 1433
tds version = 8.0

#test方法
tsql -S mssql_con1 -U username
#輸入password後出現 1> 就成功了

#php測試
<?php
echo mssql_connect('mssql_con1', 'username', 'password') 
? 'success' 
: 'failure';
?> 
當mssql的資料是 uniqueidentifier 在LINUX上的FREETDS 要用  mssql_guid_string 或 在SQL 用 cast(欄位名 as varchar(36)) 轉換字元, 在windows用com 時會自動轉
uniqueidentifier  的說明:
http://technet.microsoft.com/zh-tw/library/ms190215.aspx
php的其它解法可以看:
http://uk.php.net/manual/en/function.mssql-guid-string.php


如果發生:
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.
請使用底下語法:

SET ANSI_WARNINGS ON
SET ANSI_NULLS ON

參考:
http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/1d501b57-fc58-4fbe-9bec-6c38ad158a62