首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PDO ODBC将PHP连接到MSSQL

问通过PDO ODBC将PHP连接到MSSQL
EN

Stack Overflow用户
提问于 2013-11-23 22:50:54
回答 3查看 95.5K关注 0票数 27

当我执行这段代码时:

代码语言:javascript
复制
print_r(PDO::getAvailableDrivers()); 

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

代码语言:javascript
复制
Array ( [0] => mysql [1] => odbc [2] => sqlite )

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

代码语言:javascript
复制
$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword');

它什么也做不了--没有错误,而且根本不能工作。它甚至不会执行超过这条线的代码!

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-24 01:16:37

您需要设置几个配置文件。/etc/odbc.ini、/etc/odbcinst.ini和/etc/freetds/freetds.conf (这些位置对于Ubuntu12.04是有效的,对于大多数*nixes可能是正确的)。

您需要安装unixodbc和freetds (不确定CentOS上的包名是什么)。在Ubuntu中,这应该是apt-get install unixodbc tdsodbc。

要获得安装这些工具的帮助,请查看此问题Can't Install FreeTDS via Yum Package Manager

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

代码语言:javascript
复制
# 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

代码语言:javascript
复制
# 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中找到它)

代码语言:javascript
复制
# 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行。

在完成这些更改后,您必须重新启动。

在PHP代码中,您将像这样创建PDO对象:

代码语言:javascript
复制
$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd");

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

此外,如果您在页面中执行phpinfo()并搜索" freetds“,将显示一个列有freetds作为库版本的mssql部分,您就会知道它是有效的。

票数 38
EN

Stack Overflow用户

发布于 2015-05-21 17:39:24

对于实际的PHP调用,接受的答案是正确的。正如有人正确评论的那样,它应该调用odbc驱动程序。其次,它没有使用已经在odbc.ini中配置的数据源名称( DSN ),而是实际上创建了一个ad-hoc DSN。而是:

代码语言:javascript
复制
$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd");

其中DSN mssql是指odbc.ini中的对象

您可以按如下方式创建点对点DSN:

代码语言:javascript
复制
$pd = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName,
              $dbuser, $dbpass);

其中,mssql现在引用freetds.conf中的服务器对象,FreeTDS odbcinst.ini中的驱动程序对象。

(这真的应该是一个评论,但我没有代表点)。

票数 37
EN

Stack Overflow用户

发布于 2018-05-28 15:35:43

如果您想使用FreeTDS驱动程序直接设置到MS SQL server的pdo odbc连接,而不在配置文件freetds.conf中指定它。

代码语言:javascript
复制
$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;PORT=$portNo;DATABASE=$dbName"; 
$conn = new PDO($connection_string, $dbUser, $dbPass);

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

代码语言:javascript
复制
$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;DATABASE=$dbName"; 
$conn = new PDO($connection_string, $dbUser, $dbPass);

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

代码语言:javascript
复制
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver      = libtdsodbc.so
Setup       = libtdsS.so
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20163776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档