Maybe it's unique to my FreeTDS configuration, but if I don't call mssql_free_statement() after every stored procedure (i.e. mssql_init, mssql_bind, mssql_execute, mssql_fetch_array), all subsequent stored procedures on the same database connection will fail.
I only mention it because this man-page deprecates the use of mssql_free_statement(), saying it's only there for run-time memory concerns. At least in my case, it's also a crucial step in the process of running a stored procedure. If anyone else has problems running multiple stored procedures on the same connection, I hope this helps them out.