PHP从Debian Etch使用ODBC和FreeTDS访问MSSQL数据库

PHP访问一个MSSQL数据库从Debian Etch与ODBC和FreeTDS

这假设您已经在系统上正确设置了Apache2和PHP5。 我努力使这个连接工作是从www.unixodbc.orgwww.freetds.org发现的信息 编制的 。 这些步骤对我来说适用于Apache2 Web服务器,php5在2007年10月在Debian Etch stable上运行.SQL Server在Windows 2003 Server操作系统上运行Microsoft SQL 2005。

在这些说明中,我假定您已经使用root用户帐号了。 我也使用joe作为我的编辑器,所以用你的选择编辑器替换。

首先安装必要的软件包:

#apt-get install tdsodbc libct3 unixodbc php5-odbc

这应该为php5下载并安装unixODBC,FreeTDS和odbc扩展名。

接下来,我们创建模板来注册FreeTDS的ODBC驱动程序,并为FreeTDS创建ODBC DSN。 您可以将这些文件放在任何您喜欢的位置,您将使用“odbcinst”来实际配置系统。 我选择将它们放在tds配置文件所在的/ etc / freetds中。

ODBC驱动程序注册:

#joe /etc/freetds/tds.driver.template

然后将其粘贴到编辑器中:

[TDS]
Description     = FreeTDS Driver for Linux & MSSQL on Win32
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so

现在DSN:

#joe /etc/freetds/tds.dsn.template

然后将其粘贴到编辑器中:

[DSN_NAME]
Description     = Test to freeTDS
Driver          = TDS
Trace           = No
Database        = DefaultDatabase [replace with your database name]
Server          = mysqlserver.inter.net [replace with your SQL server's host]
Port            = 5050 [replace with the port that SQL is listening on]

好的,现在你需要将这些模板插入到unixODBC系统中:

#odbcinst -i -d -f /etc/freetds/tds.driver.template
#odbcinst -i -s -f /etc/freetds/tds.dsn.template

此时我遇到的一个问题是DSN已经安装到根帐户的个人odbc设置。 由于我不能以www-data身份登录来运行dsn安装命令,所以我只需将root的.odbc文件复制到/etc/odbc.ini ,这是所有用户可以引用的系统范围的DSN文件。

#mv /etc/odbc.ini /etc/odbc.ini.bak  [in case you had others]
#cp /root/.odbc.ini /etc/odbc.ini

现在,您需要通过编辑php.ini文件在php中启用odbc扩展。 除非你做了某种自定义构建或安装php ini文件应该在/ etc / php5 / apache2 /目录中,所以:

#joe /etc/php5/apache2/php.ini

最佳做法是将其添加到php.ini文件的扩展部分:

extension = odbc.so

现在您需要重新启动Apache才能将php更改到系统中。

#/etc/init.d/apache2 restart

应该是 假设您连接到MSSQL机器,您应该可以使用isql测试此设置。 使用上述设置和Bob的密码为Marley的用户名,这里是测试:

#isql -v DSN_NAME Bob Marley

你应该得到SQL>提示符,你可以运行任何你喜欢的选择或其他命令。 现在到PHP部分。 所有你需要做的(再次假设上面的exmamples)是添加你的php文件的conenction信息并得到编码。 以下是一个基本的例子,你当然需要屈服于你的意愿。

<?php

# connect to a DSN "DSN_NAME" with a user "Bob" and password "Marley"
$connect = odbc_connect("DSN_NAME", "Bob", "Marley");

# query the users table for all fields
$query = "SELECT * FROM users";

# perform the query
$result = odbc_exec($connect, $query);

# fetch the data from the database
while(odbc_fetch_row($result)) {
$field1 = odbc_result($result, 1);
$field2 = odbc_result($result, 2);
print("$field1 $field2\n");
}

# close the connection
odbc_close($connect);

?>

如果您有问题,请从基本的网络故障排除开始。 确保您可以从debian框中ping服务器。 尝试telneting到MSSQL正在监听的服务器和端口。 如果它的工作,你应该得到一个空白屏幕,你需要突破。 之后,如果isql示例工作,但你的php连接不,我不知道在哪里指向你。

祝你好运!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏