2
votes

We have a CakePHP 1.3 application that we're in the process of upgrading to 2.2.3. One of the requirements of our app is to be able to query into an MSSQL database of a separate application to do some authentication and to pull user data out.

After two wasted days of researching and harassing our webhost to install the PHP / PDO / MSSQL lib (we already have PDO for MySQL, sqlite and sqlite 2) it's staring to seem pretty grim.

TL;DR: We need to find a way to do PDO MSSQL queries under Linux.

Begin Rant:

The thing that's driving me crazy is this: The CakePHP devs BROKE MSSQL compatibility for the sake of making all their DB wrappers with PDO. If you had a 1.3 app on a Linux server that was happily connecting to MSSQL databases and want to upgrade it to 2.2, you will no longer be able to connect to that database because apparently using PDO is more important than ensuring that you don't destroy existing functionality for your users.

CakePHP 2.x Docs do NOT warn users of this pitfall, all they say is that you need PDO.

There should be a notice that PDO/MSSQL does not work under Linux, or there should be an alterantive to the Sqlserver.php datasource that's provided with stock CakePHP so that people upgrading their apps have a chance of getting their applications functional again under 2.2x

I am really steamed about this right now because I wasted a week of time porting things over from 1.3 to 2.2 and now it looks like I either have to manually write the queries and ignore CakePHP's great database abstraction, or I need to convert all my work BACK to 1.3 and give up all the new improvements in the latest version of CakePHP.

2
Instead of wasting another week to do any of the above, have you considered writing the back-end yourself? - mishmash
This is exactly what I'm doing right now, I tried to adapt the 1.3 Mssql datasource but that didn't work very well either. - DirtyBirdNJ

2 Answers

3
votes

The trick is :

sudo apt-get install php5-sybase

For some reason extension is not called mssql

sybase worked fine for me

0
votes

What you need to do is install the ODBC drivers from Microsoft and set up the odbc connection strings. The process can be a bit tricky but it does work, and the driver is stable.

You can then use $dbh = new PDO("odbc:CONNECTIONNAME", $user, $password); to connect through PDO.

Once that is sorted, I think you can still use the MSSQL data source but modifying the connection string.