Hmmm...
My first suspicion would be that you are exceeding the maximum length of a PHP string data type. The PHP manual is silent on this issue, so I don't know how long of strings are permitted.
Also, working with blob fields of any kind in MSSQL is necessarily cumbersome, because the blob is actually stored in an internal "file" structure, with a 16-byte pointer to that file actually residing in the table. Our company encountered all kinds of problems with TEXT fields and eventually moved to the solution outlined below.
This will work with MSSQL 7 and up and will kill both these birds with one stone: MSSQL 7+ supports varchars of up to 8K long, so we can create a table where the document is broken up into fragments. Here's how I've done it before:
CREATE TABLE msword_documents
document_id INT,
sequence_id INT,
document_fragment VARCHAR(8000)
Split your .doc file up into 8000-byte sections and insert each fragment into a row, with the document_id identifying the whole document, and the sequence_id incrementing for each fragment of that document. In your original table, store the document_id instead of the TEXT field. When you want to reconstitute the file, do the following SELECT:
"SELECT document_fragment FROM msword_documents WHERE document_id = $doc_id ORDER BY sequence_id"
And then iterate the resultset, concatenating the results.