We just enabled the MSSQL extension via FreeTDS on a Media Temple DV 4 VPS. Here’s a line by line of how we did it, borrowing heavily from http://www.mavrick.id.au/2012/php-5-3-6-mssql-freetds/
, but adding the particulars for the MediaTemple DV and for the particular version of PHP (5.3.5) that we were using:
Make a directory to hold these sources:
Grab the source of FreeTDS:
tar zxvf freetds-stable.tgz
./configure –enable-msdblib –prefix=/usr/local/freetds
make && make install
For some reason these files need to be copied over:
cp include/tds.h /usr/local/freetds/include
cp src/tds/.libs/libtds.a /usr/local/freetds/lib
Adjust for your desired version of PHP (this example is 5.3.5):
tar xvfz php-5.3.5.tar.gz
Now, when we first ran the make command we had to deal with a type redefinition in
Copy the extension to the proper directory… You can find out what directory it is with this command:
php -i | grep extension_dir
In our case it was /usr/lib64/php/modules.
cp modules/mssql.so /usr/lib64/php/modules
Edit php.ini file (this is the global one):
Then restart your web server:
Other PHP MSSQL Resources:
I compiled the pdo_dblib.so extension… but it looks like PHP is compiled with –disable-pdo. So I went back to mssql_connect as a connection method…
Logging in as the user to the bash shell, I could telnet to the database server’s ip at port 1433.
From the command line as well, I could run tsql (the diagnostic tool that comes with FreeTDS) and connect to the server, where I was able to verify that the hostname, instance, and dbname lookups are correct. I could even run T-SQL statements and query the database successfully from there.
I configured the FreeTDS conf file to have [appname] as a reference to the server, and then accessed via the following code in:
$hostname = 'appname';
$username = 'username';
$password = 'password';
$databasename = 'database';
//connection to the database
$connection = mssql_connect($hostname, $username, $password)or die("Unable to connect to $hostname");
Connected to MSSQL
$result = mssql_query("SELECT TOP 1 field from table");
$row = mssql_fetch_array($result);
Result from sample query: ".$row."
Which outputs the expected:
Connected to MSSQL
Result from sample query: x
This was the missing puzzle piece:
Apparently FreeTDS looks in /usr/local/etc by default, not /etc.