linux php pdo mssql,LINUX php mssql(odbc /pdo_dblib)

本文详细介绍了在Ubuntu环境下,如何通过安装unixODBC和FreeTDS来连接MSSQL Server,并配置相关参数解决编码问题。包括安装步骤、配置freeTDS和unixODBC的配置文件,以及PHP的PDO连接测试。同时,提到了在不同配置下可能出现的GBK编码和UTF-8编码问题。
摘要由CSDN通过智能技术生成

1 安装unixODBC和freeTDS

apt-get install unixodbc

apt-get install unixodbc-dev

apt-get install tdsodbc

apt-get install freetds-dev

apt-get install freetds-bin

(本人在测试的过程中,只需要安装 unixodbc和freetds-bin)

sudo apt-get install php5-odbc

2 freeTDS配置

vi /etc/freetds/freetds.conf

[global]增加

client charset = UTF-8

下面增加

[mssql20051]

host=192.168.0.1

port=1433

tds version=8.0

[mssql20052]

host=192.168.0.2

port=1433

tds version=8.0

tsql测试连接两个mssql服务器

tsql -S mssql20051 -U sa -P 123 -D test

tsql -S mssql20052 -U sa -P 123 -D test

执行sql没问题.

select * from t1

go

sql返回的编码与系统locale有关。

3 unixodbc配置文件

vi /etc/odbcinst.ini

[TDS]

Description=MS-SQLServer

Driver=/usr/lib/odbc/libtdsodbc.so

Setup=/usr/lib/odbc/libtdsS.so

UsageCount=1

vi /etc/odbc.ini

[ODBC Data Sources]

mssql1     = MS SQL ODBC 2.50 Driver DSN

mssql2     = MS SQL ODBC 2.50 Driver DSN

[mssql1]

Driver       = /usr/lib/odbc/libtdsodbc.so

Description  = MySQL ODBC 2.50 Driver DSN

Servername   = mssql20051  #

Database     = test

Trace        = No

[mssql2]

Driver       = /usr/lib/odbc/libtdsodbc.so

Description  = MySQL ODBC 2.50 Driver DSN

Server       = 192.168.0.2

Port         = 1433

User         = sa

Password     = 123

Database     = test

Option       = 3

Socket       =

Trace        = No

TDS_VERSION  = 8.0

注意mssql1和mssql2里面一个是Servername一个是server的ip

如果使用Servername,则填写freetds.conf里面的配置

测试连接

isql -v mssql1 sa 123

执行sql返回结果的编码与locale有关

isql -v mssql2 sa 123

执行sql返回结果的编码是GBK

4 编译php

./configure  --with-unixODBC=/usr --with-pdo-odbc=unixODBC,/usr --with-apxs2=/usr/local/apache2/bin/apxs

make

make install

5 php测试代码<?php

//TDS Driver , only support GBK

$dsn = "odbc:Driver=TDS; Server=192.168.0.1; Uid=sa; Pwd=123; Database=test;";

$c = new PDO($dsn);

//MiscroSoft sqlsrv for php windows ,support utf8,  add mssql.charset=utf8  in php.ini

//$c = new PDO( "sqlsrv:Server=192.168.0.1 ; Database = test", "sa", "123", array(PDO::SQLSRV_ATTR_DIRECT_QUERY => true));

//Linux, TDS Data Source, support utf8

//$c = new PDO('odbc:mssql1','sa','123');

// $c = new PDO('odbc:dbserverdsn','sa','Admin888');

$query = 'SELECT top 5 * FROM userinfo';

$stmt = $c->query( $query );

while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {

print_r( $row );

}

$c = null;

?>

//TDS Driver , only support GBk

$dsn = "odbc:Driver=TDS; Server=10.1.3.252; Uid=sa; Pwd=sqltest; Database=bc_cric_lj;";

$c = new PDO($dsn);

//MiscroSoft sqlsrv for php windows

//$c = new PDO( "sqlsrv:Server=172.18.3.104 ; Database = test", "sa", "123", array(PDO::SQLSRV_ATTR_DIRECT_QUERY => true));

//Linux, TDS Data Source, support utf8

//$c = new PDO('odbc:mssql','sa','sqltest');

$query = 'SELECT top 5 * FROM criclj_internal_home_baseinfo';

$stmt = $c->query( $query );

while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {

print_r( $row );

}

$c = null;

?>

我的/etc/odbc.ini

[dbserverdsn]

Driver = FreeTDS

Description = ODBC to SQLServer via FreeTDS

Trace = No

Servername = 192.168.1.103

Database = sc

cat /etc/odbcinst.ini

[FreeTDS]

Description = MS SQL SERVER

Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so

Setup = /usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so

FileUsage = 1

client charset = utf-8

cat /etc/freetds/freetds.conf

#   $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $

#

# This file is installed by FreeTDS if no file by the same

# name is found in the installation directory.

#

# For information about the layout of this file and its settings,

# see the freetds.conf manpage "man freetds.conf".

# Global settings are overridden by those in a database

# server specific section

[global]

# TDS protocol version

;tds version = 4.2

# Whether to write a TDSDUMP file for diagnostic purposes

# (setting this to /tmp is insecure on a multi-user system)

;dump file = /tmp/freetds.log

;debug flags = 0xffff

# Command and connection timeouts

;timeout = 10

;connect timeout = 10

# If you get out-of-memory errors, it may mean that your client

# is trying to allocate a huge buffer for a TEXT field.

# Try setting 'text size' to a more reasonable limit

text size = 64512

# A typical Sybase server

[egServer50]

host = symachine.domain.com

port = 5000

tds version = 5.0

# A typical Microsoft server

[192.168.1.103]

host = 192.168.1.103

port = 1433

tds version = 7.0

$c = new PDO('odbc:dbserverdsn','sa','Admin888');

$query = 'SELECT top 5 * FROM t1';

$stmt = $c->query( $query );

while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {

print_r( $row );

}

$c = null;

PDO_DBLIB:

sudo apt-get install php5-sybase  安装DBLIB扩展

在MS SQL SERVER的发展历史中,微软最初就是和Sybase合作的

中文乱码:

连接字符串里加charset=GBK,freetds的配置文件里的[global]中加一句client charset = GBK 等等

freetds使用的源码1.0编译安装到/usr/local/freetds  安装好后就会有tsql工具可以执行SQL

ini_set('display_errors','On'); #如果有错,展示详细错

$db = new PDO("dblib:host=192.168.1.10:1433;dbname=Card;","sa","a88");

$sql = "Select top 5 ID,CardID, PInTime from CprCardConsumeRecordTmpxxxx";

foreach ($db->query($sql) as $rows)

{

$f1 = $rows[2]; // 中文乱码

//$f1 = iconv('GBK', 'UTF-8//IGNORE', $rows[1]);

print_r($f1);

}

$db = null;

?>

require_once(__DIR__.'/../class/ORM.php');

ORM::configure("dblib:host=192.168.0.10:1433;dbname=Card;");

ORM::configure('return_result_sets',true); // returns result sets

ORM::configure('username', 'sa');

ORM::configure('password', 'Admin');

$db = ORM::get_db();

$o = ORM::for_table('CprCardConsumeRecordTmp')->limit(20)->find_array();

print_r( $o);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值