1

イメージを varbinary 形式で格納する SQL テーブルがあります。SQLテーブルから画像データを取得し、システムに画像ファイルとして保存したいと考えています。

$getPhotos = "SELECT Name, PhotoContent
              FROM [Photos]";                 
$resultPhotos = odbc_exec($con, $getPhotos);

while($post = odbc_fetch_array($resultPhotos)){
    $fileData = $post['PhotoContent'];
    $fileName = "D:\\Images\\".$post['Name'];
    file_put_contents($fileName,str_replace('data:image/jpeg;base64,','',$fileData));
}

上記のコードは画像ファイルをシステムに保存しますが、保存された画像は壊れています。

ここに画像の説明を入力

この問題を解決するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

これらはすべて MS SQL で実行できます。私はPHPについて何も知らないので。

まず、これが私の下の表です。 ここに画像の説明を入力

1) blob 形式のファイルを作成して、blob をエクスポートできるようにします。

    DECLARE @sql VARCHAR(500)
    SET @sql = 'bcp DatabaseName.dbo.Blob format nul -T -n -f C:\Users\Public\Documents\blob.fmt -S ' + @@SERVERNAME
    SELECT @sql 
    EXEC master.dbo.xp_CmdShell @sql 

フォーマットファイル フォーマットファイル

2) フォーマット ファイルを編集します。コンテンツ列のみを保持します。

2.1) オリジナルフォーマットここに画像の説明を入力

2.2) 以下のようにフォーマットを変更しますここに画像の説明を入力

3) 最後に、すべての varbinary データを .jpb に変更するストアド プロシージャを作成しました (.jpg だけでなく、別の形式にすることもできます)。

CREATE PROCEDURE BLOBImageExport

AS

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON

IF OBJECT_ID('tempdb..#export') IS NOT NULL DROP TABLE #export

DECLARE @imgID INT,
    @imgName VARCHAR(128),
    @sql VARCHAR(8000)

SELECT * 
INTO #export
FROM Blob


WHILE (SELECT COUNT(*) FROM #export) > 0
BEGIN
    SELECT TOP 1 @imgID = ID,
        @imgName = imgName
    FROM #export

    SET @sql = 'BCP "SELECT Content FROM DATABASENAME.dbo.Blob WHERE ID = '  + CONVERT(VARCHAR(10), @imgID) + '" QUERYOUT C:\Users\Public\Documents\' + '' + @imgName + '' + ' -T -f C:\Users\Public\Documents\blob.fmt -S ' + @@SERVERNAME

    EXEC master.dbo.xp_CmdShell @sql

    DELETE #export
    WHERE ID = @imgID
END 

4) 下の画像が表示されます。 ここに画像の説明を入力

4.1) 会計士のイメージここに画像の説明を入力

4.2) Accountant2 画像ここに画像の説明を入力

5)したがって、PHPですべての画像を指定したドライブにコピーするか、SSISを使用するか、ディスクに保存するストアドプロシージャの場所を変更できます。

お役に立てれば。

于 2016-06-15T09:11:31.947 に答える