Skip to Content.
Sympa Menu

freetds - Re: [freetds] Re: PHP & FreeTDS

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Daniel Fazekas <fdsubs AT axelero.hu>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] Re: PHP & FreeTDS
  • Date: Wed, 25 Aug 2004 02:22:14 +0200


On Aug 25, 2004, at 1:09, Walls Rob W Contr 75 CS/SCBS wrote:

I know this is not a PHP group, but I hoping someone knows what to do to
make this work with PHP without recompiling.

Note that your PHP apparently supports shared extensions, so you could add support for the MSSQL extension without recompiling the whole thing, if that sounds better than being stuck with ODBC.

Warning: SQL error: [unixODBC][FreeTDS][SQL Server]Unable to connect to data
source, SQL state S1000 in SQLConnect in /usr/share/php/common.inc on line
25

I hate giving unrelated and unasked for advice, but be very cautious of using an extension such as ".inc" for holding php code. That could all too easily lead to security problems, unless special precaution is taken to configure Apache not to serve a ".inc" file, or to have it run through the php interpreter. If such a file ends up in a web-accessible directory, people could enter the file's address and since that extension does not normally invoke the php interpreter, the full source code will be sent to the browser instead.

Now /usr/share/php/ does not sound like a directory anyone would make accessible through the web, so most probably there's no risk involved in this case. Sorry if you were aware of this, I just felt it was worth mentioning. Generally it's better to use extensions like ".inc.php" instead.

I'm using this code to connect:
$connection_string =
'DRIVER=TDS;SERVERNAME=db75cs-891-3;UID=$DB_LOGIN;PWD=$DB_PASSWORD; DATABASE=
$DB;';
$connection = odbc_connect( $connection_string, $DB_LOGIN, $DB_PASSWORD);

Would it be unfeasible for your project to move most of the connection parameters into the separate configuration files? I'm not really familiar with these jumbo ODBC connection strings. ;)

However, note that since you are setting $connection_string with single apostrophes, the $variables in the string are not getting expanded and are kept without modification. That is, it remains UID=$DB_LOGIN, and won't get changed to UID=whatever_is_in_$DB_LOGIN, which is probably what you wanted.
You'd have to quote the string with " for that expansion to take place. This is the big difference between ' and " in php. I can't guarantee this small change will make it all work, though. :)


The following works for me:

In /usr/local/etc/freetds.conf:

[TheNameSpecifiedInFreetdsConf]
host=this.is.the.real.host.name.or.ip.of.the.server.lan
port=1433
tds version=8.0
client charset = utf-8

In /etc/odbcinst.ini:

[TDS]
Description = FreeTDS
Driver = /usr/local/lib/libtdsodbc.so

In /etc/odbc.ini:

[TheOdbcIniDataSourceName]
Driver = TDS
Servername = TheNameSpecifiedInFreetdsConf


And in the PHP code you just initialize your connection as

$conn = odbc_connect('TheOdbcIniDataSourceName', 'username', 'password');


[When using mssql_connect(), you would have to specify 'TheNameSpecifiedInFreetdsConf' as the server name.]


PHP finds an odbc.ini file in /etc/php.d/ which loads /usr/lib/php4/odbc.so

That sounds odd. PHP does not look for or use a file called odbc.ini in order to load its shared extensions. odbc.so is probably loaded from your php.ini instead, which is in /etc/php.ini on Red Hat by default.

--
fds





Archive powered by MHonArc 2.6.24.

Top of Page