Comment insert des données binarys dans MSSQL en utilisant PDO

Je rencontre actuellement une erreur étrange.

La configuration: MSSQL Server 2012 Express avec un localdb Le classment de la table cible est: SQL_Latin1_General_CP1_CI_AS

PHP 5.3.9 sur un server Zend 5.6 MCrypt avec MCRYPT_RIJNDAEL_256 et MCRYPT_MODE_ECB

Sublime Text 2 enencoding par défaut (je l'ai lu est UTF8 BOM)

J'utilise PDO avec l'adaptateur MS officiel pour le server MSSQL. Tout fonctionne bien à part une chose: je ne peux pas écrire une ligne dans ma table d'administrateur à cause du mot de passe.

Jetons un oeil à mon mot de passe ENCRYPTED:

y"ûƒ^äjw¾bðúl5êù-Ö=W¿Š±¬GP¥Œy÷&ø 

C'est la trace de PDO:

 Array ( [0] => IMSSP [1] => -7 [2] => An error occurred translating ssortingng for input param 3 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page. ) SQL: [120] INSERT INTO administrator ( [username], [email], [password], [section] ) VALUES(:username, :email, :password, :section) Params: 4 Key: Name: [9] :username paramno=0 name=[9] ":username" is_param=1 param_type=2 Key: Name: [6] :email paramno=1 name=[6] ":email" is_param=1 param_type=2 Key: Name: [9] :password paramno=2 name=[9] ":password" is_param=1 param_type=2 Key: Name: [8] :section paramno=3 name=[8] ":section" is_param=1 param_type=2 

Lorsque j'utilise mon Centre de gestion MSSQL, je peux insert ma ligne avec exactement la même requête SQL. La configuration de la colonne est correcte, je suppose:

  ["id"]=> ssortingng(3) "int" ["username"]=> ssortingng(12) "nvarchar(45)" ["email"]=> ssortingng(12) "nvarchar(45)" ["password"]=> ssortingng(12) "varbinary(45)" ["section"]=> ssortingng(11) "nvarchar(7)" ["country_code"]=> ssortingng(11) "nvarchar(2)" 

J'utilise des instructions préparées et la fonction bindParam avec des options non supplémentaires pour exécuter mes instructions SQL.

Si quelqu'un a une idée, comment résoudre cela s'il vous plaît faites le moi savoir. Toute aide est appréciée!

Vous devriez changer votre collation à quelque chose comme utf8_unicode_ci pour gérer ces quelques caractères sans surveillance.

Aussi, vous devriez essayer quelque chose comme ceci:

 $db = new PDO('foo', 'bar', 'blo'); $stmt = $db->prepare("select foo, bar from table where id=?"); $stmt->execute(array($_GET['id'])); $stmt->bindColumn(1, $type, PDO::PARAM_STR, 256); $stmt->bindColumn(2, $lob, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); header("Content-Type: $type"); fpassthru($lob); 

Pour vérifier le type (c'est là que l'erreur / le bug commence à se produire), faites cette vérification, peut-être même à la place de la dernière ligne de mon exemple ci-dessus:

 if (is_ssortingng($lob)) echo $lob; else fpassthru($lob);