2015-08-22 9 views
0

J'utilise des pilotes PDO MSSQL (avec beaucoup de difficultés) pour me connecter à une base de données MSSQL. Je viens de passer de mssql_. J'ai un champ dans une table qui est un fichier texte que j'utilise pour stocker un fichier. Si nécessaire, le champ est récupéré et les données écrites sur le disque.PDO corrompant MSSQL Données de champ de texte utilisées pour stocker le fichier

Cela fonctionne très bien en utilisant les pilotes mssql_, mais la récupération des données avec PDO (connexion normale sans paramètres supplémentaires) corrompt en quelque sorte les fichiers. Je sais que les données sont correctes car j'ai d'autres moyens de produire et de vérifier, mais j'ai besoin d'un travail pour ce problème de PDO.

J'ai essayé lier la colonne en tant que LOB en vain

$stmt->bindColumn(1, $lob, PDO::PARAM_LOB); 

Toutes les suggestions pour résoudre ce problème?

+0

Avez-vous mis en place pour le bon encodage PDO lorsque vous créez l'instance? – Bono

+0

Je pense que j'ai besoin de savoir quel est le bon codage. –

Répondre

0

J'ai trouvé la solution. Vous devez lier la colonne et spécifier qu'il est binaire PDO::SQLSRV_ENCODING_BINARY

$stmt = $PDORecipeCONN->prepare("Select FileDataField from Documents where VersionID= :Ver"); 
$stmt->execute(array(':Ver' => $fileid)); 
$stmt->bindColumn(1, $Data , PDO::PARAM_LOB,0,PDO::SQLSRV_ENCODING_BINARY); 
$stmt->fetch(PDO::FETCH_BOUND); 
$fp = fopen($fileid . '_file.doc', 'w'); 
fwrite($fp, $Data); 

fclose($fp);