2016-10-05 4 views
0

Ich habe einen PHP-Code, der in eine MySQL-Datenbank Daten und einen Blob (img und/oder pdf) einfügt.SQL Server Daten einfügen file_get_contents php

ich habe Datenbank auf SQL Server mirgate, wenn ich versuche, um den Code auszuführen Daten in einer SQL Server-Tabelle einzufügen, zeigt mir SQL Server diese Fehlermeldung:

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. 

der Code ist folgende:

$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]; 

kann mir jeder sagen, wie ich tun muss, um nvarchar (max) zu varbinary (max) zu konvertieren.

dank

Antwort

1

Verwenden https://msdn.microsoft.com/en-us/library/ms187928.aspx explizite Konvertierung.

Beispiel

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; 

In Ihrem Code ich denke, es

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

Dank füge es in Ordnung, aber wie kann ich zeigen, das Blob in einer Webseite Seite. In Mysql habe ich folgendes: 'header (" Content-type: {$ doc-> extension} "); echo ($ doc-> archivo); '($ doc-> archivo) ist der Wert, der in der SQL SELECT-Abfrage empfangen wird. Ich muss etwas von meinem Code ändern, um mit Sql Server zu laufen? Nochmals vielen Dank – bcg

+0

Sie können 'varbinary' Spalte in' varchar' konvertieren mit 'wählen .. cast (archivo als varchar (max)) als Archivo' und mit der Konvertierung (falls vorhanden), die Sie zuvor auf den ursprünglichen Dateiinhalt angewendet haben übergibt es als Parameter an "einfügen". – Serg

+0

die Arraywerte an dem Einsatz sind '$ valores = array ( ': nombre' => $ name, ': archivo' => utf8_encode ($ destino), ': extension' => $ Tipo, ); 'und um mit der Konvertierung fortzufahren, um das img/pdf zu zeigen, wäre ich' utf8_decode ($ doc-> archivo) '. ich bin mir nicht sicher, ob ich dich gut verstehe, ich habe das gemacht und die webseite gibt mir eine weiße seite ohne img/pdf zurück. Ich weiß nicht, was ich falsch mache, aber in Mysql hat gut funktioniert. Danke für die Antworten – bcg