2010-08-27 98 views
1

我正在爲我們的客戶端編寫代碼,該代碼旨在將圖像從SQL Server數據庫讀取到文件中一個緩存目錄。當我從使用adodb for php讀取SQL Server數據庫時,如何阻止varbinary數據被截斷爲256kb

二進制數據被截斷爲262144字節(256kb)。該列的類型爲varbinary(max),並且我們使用ADOdb for Php來訪問數據庫。截斷的原因是什麼?我們如何防止截斷?

附件是用來執行連接代碼:

$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

您正在使用哪個版本的SQL Server? – Tahbaza 2010-08-27 23:18:42

+0

Microsoft SQL Server企業版版本9.00.1399.06 如果我正確讀取信息。 – Roybug 2010-08-28 05:33:40

回答

0

如果你還是SQL Server 2000中,你需要處理的BLOB like this上。無論如何,使用​​方法可能是你正在尋找的。 Microsoft提供了一個示例here

+0

我正在使用Php ADOdb庫(在原始文章中的一個疏漏,我已經糾正)。我會研究它是否也有GetBytes()。 – Roybug 2010-08-28 06:08:17

0

隨着ADOdb中,你可以打開adodb.inc.php文件,你會看到一行:

變量$ maxblobsize = 262144;

您可以將其更改爲更大的值。

相關問題