为了账号安全,请及时绑定邮箱和手机立即绑定

通过PDO ODBC将PHP连接到MSSQL

/ 猿问

通过PDO ODBC将PHP连接到MSSQL

慕村9548890 2019-11-14 14:25:35

当我执行此代码时:


print_r(PDO::getAvailableDrivers()); 

它说我有odbc可用的驱动程序。


Array ( [0] => mysql [1] => odbc [2] => sqlite )

但是,当我尝试像这样使用它时:


$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword');

它什么也没做-没有错误,也根本不起作用。它甚至不会执行到该行!


如何通过PDO和ODBC将PHP连接到此MSSQL数据库?


查看完整描述

3 回答

?
慕工程0101907

您需要设置几个配置文件。/etc/odbc.ini,/etc/odbcinst.ini而/etc/freetds/freetds.conf(这些位置是有效的Ubuntu 12.04,并可能是正确的大多数* nixes)。


您需要安装unixodbc和freetds(不确定CentOS上的软件包名称是什么)。在Ubuntu中将是apt-get install unixodbc tdsodbc。


如需安装这些软件的帮助,请查看此问题。无法通过Yum Package Manager安装FreeTDS


/etc/odbc.ini(此文件可能为空)


# Define a connection to a Microsoft SQL server

# The Description can be whatever we want it to be.

# The Driver value must match what we have defined in /etc/odbcinst.ini

# The Database name must be the name of the database this connection will connect to.

# The ServerName is the name we defined in /etc/freetds/freetds.conf

# The TDS_Version should match what we defined in /etc/freetds/freetds.conf

[mssql]

Description             = MSSQL Server

Driver                  = freetds

Database                = XXXXXX

ServerName              = MSSQL

TDS_Version             = 7.1

/etc/odbcinst.ini


# Define where to find the driver for the Free TDS connections.

# Make sure you use the right driver (32-bit or 64-bit).

[freetds]

Description = MS SQL database access with Free TDS

Driver      = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so

#Driver      = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Setup       = /usr/lib/i386-linux-gnu/odbc/libtdsS.so

UsageCount  = 1

/etc/freetds/freetds.conf(或者您可以在/etc/freetds.conf中找到它)


# The basics for defining a DSN (Data Source Name)

# [data_source_name]

#       host = <hostname or IP address>

#       port = <port number to connect to - probably 1433>

#       tds version = <TDS version to use - probably 8.0>


# Define a connection to the Microsoft SQL Server

[mssql]

    host = XXXXXX

    port = 1433

    tds version = 7.1

您可能必须tds version = 7.1根据您的MSSQL版本更改上面的行。


进行这些更改后,您将必须重新启动apache。


在您的PHP代码中,您将如下创建PDO对象:


$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd");

请注意,您的用户名可能需要采用以下格式:domain\username。


此外,如果您phpinfo()在页面中执行并搜索“ freetds”,它将显示一个mssql部分,其中freetds列为“库版本” ,您将知道它起作用。


查看完整回答
反对 回复 2019-11-14
?
一只甜甜圈

接受的答案在实际的PHP调用之前都是正确的。正如有人正确评论的那样,它应该调用odbc驱动程序。其次,它不使用在odbc.ini中配置的数据源名称(DSN),但实际上是在创建临时DSN。代替:


$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd");

其中,mssql指向odbc.ini中的DSN对象


您可以按如下方式创建临时DSN:


$pd = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName,

              $dbuser, $dbpass);

其中MSSQL现指服务器对象freetds.conf和freetds的驱动程序对象ODBCINST.INI


(这实际上应该是评论,但我没有代表点)。


查看完整回答
反对 回复 2019-11-14
?
达令说

如果要使用FreeTDS驱动程序直接建立与MS SQL Server的pdo odbc连接,而无需在配置文件freetds.conf中指定它。


$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;PORT=$portNo;DATABASE=$dbName"; 

$conn = new PDO($connection_string, $dbUser, $dbPass);

如果您的MSSQL Server具有命名实例,则可以删除端口号,然后以server_ip \ instance_name格式修改$ serverName,例如:“ 192.168.1.1 \ sqlexpress”,其中sqlexpress是实例名称。


$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;DATABASE=$dbName"; 

$conn = new PDO($connection_string, $dbUser, $dbPass);

请注意在odbcinst.ini中配置驱动程序位置


[FreeTDS]

Description = TDS driver (Sybase/MS SQL)

Driver      = libtdsodbc.so

Setup       = libtdsS.so


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信