PHP访问一个MSSQL数据库从Debian Etch与ODBC和FreeTDS
这假设您已经在系统上正确设置了Apache2和PHP5。 我努力使这个连接工作是从www.unixodbc.org和www.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连接不,我不知道在哪里指向你。
祝你好运!