Как предотвратить усечение varbinary данных до 256 КБ при чтении из базы данных SQL Server с использованием Adodb для PHP - PullRequest
1 голос
/ 28 августа 2010

Я пишу код для нашего клиента, который предназначен для чтения изображения из базы данных SQL Server в файл в каталоге кэширования.

Двоичные данные усекаются до 262144 байтов (256 КБ). Столбец имеет тип varbinary (max), и мы используем ADOdb для 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();
        }

    }

Ответы [ 2 ]

0 голосов
/ 25 января 2011

С помощью ADOdb вы можете открыть файл adodb.inc.php и увидите строку:

var $ maxblobsize = 262144;

Вы можете изменить его на большее значение.

0 голосов
/ 28 августа 2010

Если вы все еще используете SQL Server 2000, вам нужно иметь дело с BLOB , например, .В любом случае, использование метода reader.GetBytes(), скорее всего, то, что вы ищете.Microsoft приводит пример здесь .

...