0

I am having enormous trouble connecting an existing (not programmed by myself) PHP interface to an existing SQL Server DB. I have been accessing a copy of this SQL Server DB for testing purposes on my local machine from my own self-programmed PHP interface using odbc "system DSN" interfaces. But probably, the odbc interface on my local testing environment will be looking different than on the real server, I guess.

I am establishing the odbc connection using code that looks like this:

$db_server ="localhost"; 
$db_name  ="testdb"; 
$db_user    ="testuser";   
$db_pass    ="test";

$conn = odbc_connect($db_name, $db_user, $db_pass) or die ('Can not connect '. $db_name); 

This works fine - I can access the db and everything works as it should.

The PHP interface that I am trying to integrate in my testing environment does the connection this way:

$db_server = "localhost"; # I changed that one from the original server name
$db_user   = "testuser";
$db_pass   = "test";
$db_name   = "testdb";
$connection_id = odbc_connect($dbserver, $dbuser, $dbpass);

So it seems the connection on the server is done without mentioning the $db_name field. Sounds strange to me, but I am only a novice concerning SQL via odbc - normally I only use MySQL.

So when the PHP code tries accessing the db, the following error occurs:

Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in D:\xampp\xampp\htdocs\testdb\global.include on line xxx

xxx is the line containing "$connection_id = odbc_connect($dbserver, $dbuser, $dbpass); "

Any ideas how to get that thing working? I am nearly absolutely sure it's got something to do with the odbc datainterfaces defined on my machine, but I have no idea right now.

Any kind of help is highly appreciated!

Thanks, Sasha

1
  • Your second snippet initialises $db_server etc and then uses $dbserver-- is that right? Commented Jan 9, 2011 at 18:42

1 Answer 1

2

When you connect via ODBC, you don't actually specify the target details of the database, you specify a data source name. This data source name is looked up in the data source registry, and the connection details are obtained from there. So you need to set $db_server to be the data source name, not the actual host name.

Sign up to request clarification or add additional context in comments.

3 Comments

Hi araqnid, thanks a billion! That was what confused me that much! Aaaargh, so much wasted time and such a simple and idiotic mistake - just as always... Solved.
@Sasha - If this answer solved your problem, consider marking it as accepted and providing an up vote. It not only thanks @araqnid, but also shows the community that the answer was valuable in the context of your problem.
I just figured out that you have to specify a SYSTEM datasource and not a user datasource. Took me an hour to figure that one out.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.