This what fixed it for me:
set ANSI_NULL_DFLT_ON ON
I had to query this first before calling any stored procedures
$result = mssql_query('set ANSI_NULL_DFLT_ON ON');
Hope that helps for anyone who had my problem. It was really frustrating, apparently you need this so PHP will return rows that have null columns in it and it has something to do with a compare inside the stored procedure. I believe it's when comparing something that might have a NULL value, PHP will ignore the entire row unless you pass this first.