2016-10-05 11 views
0

私は、mysqlデータベースのデータとブロブ(imgやpdf)に挿入するphpコードを持っています。sql server insert data file_get_contents php

私はSQL Serverのテーブルにデータを挿入するためのコードを実行しようとすると、SQL Serverが私にこのエラーを示して、SQL Serverにデータベースをmirgateする必要があります。

SQLSTATE[42000]: [Microsoft][SQL Server Native Client 10.0][SQL Server]No se permite la conversion implicita del tipo de datos nvarchar(max) a varbinary(max). Utilice la funcion CONVERT para ejecutar esta consulta. 

コードは以下の通りである。

$destino = addslashes(file_get_contents($value['tmp_name'])); 

       $tmpName = $value['tmp_name']; 

       // Read the file 

       $fp = fopen($tmpName, 'r'); 

       $data = fread($fp, filesize($tmpName)); 

       $destino = ($data); 

       fclose($fp); 

       $tamano = $value['size']; 

       $tipo = $value['type']; 
       $name = $value['name]; 

$sql="INSERT INTO documentacion 
     (nombre, archivo,extension) 
     VALUES 
     (:nombre, :archivo, :extension)"; 


$valores = array(
    ':nombre'  =>$name, 
    ':archivo'  =>utf8_encode($destino), 
    ':extension' =>$tipo, 
); 

try{ 

    $ejec=$bd->ejecuta($sql,$valores); 
} 
catch (PDOException $e) { 

    echo 'Error BD al insertar documentacion: ' . $e->getMessage(); 
} 
return $ejec[0]; 

誰かがnvarchar(max)をvarbinary(max)に変換する方法を教えてください。

おかげ

答えて

1

使用明示的な変換https://msdn.microsoft.com/en-us/library/ms187928.aspx。あなたのコードで例

declare @t table (val varbinary(max)); 

declare @s varchar(max) = 'Some text'; 

insert @t(val) values(cast(@s as varbinary(max))); 

select cast(val as varchar(max)) 
from @t; 

私は罰金それを挿入し、それが

VALUES 
    (:nombre, cast(:archivo as varbinary(max)), :extension) 
+0

感謝すべきだと思いますが、どのように私は、ウェブサイトのページ内のブロブを表示することができます。 Mysqlには次のものがあります: 'header(" Content-type:{$ doc-> extension} "); echo($ doc-> archivo); '($ doc-> archivo)はSQL SELECTクエリで受け取った値です。私はSqlサーバーで実行するために私のコードの何かを変更する必要がありますか?ありがとうございました – bcg

+0

'varbinary'カラムを' select .. cast(archiv as varchar(max)as archivo')で 'varchar'に変換し、前の初期ファイルの内容に適用した変換(もしあれば)これを 'insert 'のパラメータとして渡します。 – Serg

+0

挿入物の配列値は '$ valores = array( ':nombre' => $ name、 ':archivo' => utf8_encode($ destino)、 ':extension' => $ tipo、 )です。 '変換を進めてimg/pdfを表示すると' utf8_decode($ doc-> archivo) 'になります。私はあなたをよく理解しているとは確信していません、私はこれを行い、ウェブページは私にimg/pdfのない白いページを返します。私は何が間違っているのかわからないが、mysqlは正常に動作した。応答ありがとう – bcg