2010-08-27 14 views
1

J'écris le code pour un de nos clients qui est conçu pour lire une image d'une base de données SQL Server dans un fichier un répertoire de mise en cache.Comment j'arrêter les données varbinary d'être tronquées à 256kb lors de la lecture d'une base de données SQL Server utilisant adodb pour php

Les données binaires sont tronquées à 262144 octets (256 Ko). La colonne est de type varbinary (max), et nous utilisons l'ADOdb for Php pour accéder à la base de données. Quelle est la cause de la troncature, et comment l'empêcher?

Ci-joint le code utilisé pour effectuer la connexion:

$conn_image = ADONewConnection('odbc_mssql'); 
$dsn = "Driver={SQL Server};Server=servername;Database=database;"; 
$conn_image->Connect($dsn,username,password); 

$query = "SELECT 
      Personnel.Text4, 
      Images.Image 
      FROM Images 
      LEFT JOIN Personnel ON Images.ParentId = Personnel.ObjectId 
      WHERE Personnel.Text4 = '12345' 
      "; 

$result = $conn_image->Execute($query); 

if (!$result) 
     print $conn_image->ErrorMsg(); 
else 
    while (!$result->EOF) { 
     if (!empty($result->fields[0])) { 
      $filename = $result->fields[0] . ".jpg"; 
      $rawdata = $result->fields[1]; 

      $size_to_write = strlen($rawdata); 
      $bytes_written = 0; 

      $file = fopen("test" . DIRECTORY_SEPARATOR . $filename,'w'); 
      while ($bytes_written < $size_to_write) { 
       $bw = fwrite($file, substr($rawdata, $bytes_written)); 
       $bytes_written += $bw; 
      } 

      $result->MoveNext(); 
     } 

    } 
+0

Quelle version de SQL Server utilisez-vous? – Tahbaza

+0

Microsoft SQL Server Édition Entreprise, Version 9.00.1399.06 Si je lis correctement les informations. – Roybug

Répondre

0

Si vous êtes encore sur SQL Server 2000, vous devez traiter avec des BLOBs like this. Quoi qu'il en soit, l'utilisation de la méthode reader.GetBytes() est probablement ce que vous cherchez. Microsoft fournit un exemple here.

+0

J'utilise la bibliothèque Php ADOdb (un oubli dans le message original, que j'ai corrigé depuis). Je vais regarder si elle a GetBytes() aussi bien. – Roybug

0

Avec ADOdb vous pouvez ouvrir le fichier adodb.inc.php et vous verrez la ligne:

var $ maxblobsize = 262144;

Vous pouvez le modifier pour obtenir une valeur supérieure.