我有一个以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));
}
以上代码将图像文件保存在系统中,但保存的图像已损坏。
如何解决此问题?
由于
答案 0 :(得分: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)编辑格式文件。仅保留“内容”列。
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
5)因此,您可以在PHP中将所有图像复制到指定的驱动器或使用SSIS或更改存储过程中要保存到磁盘的位置。
希望这有帮助。
答案 1 :(得分:0)
在MySQL服务器中,您可以使用以下代码:
using MySql.Data.MySqlClient;
using System.IO;
using System.Globalization;
int i=0; //variable for image name
MySqlConnection conn = new MySqlConnection("SERVER=127.0.0.1;DATABASE=test;UID=root;PASSWORD=1234");
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT signature FROM imageTble ", conn);
MySqlDataReader myReader = null;
myReader = cmd.ExecuteReader();
byte[] imgg = (byte[])(myReader["signature"]);
while (myReader.Read())
{
i = i + 1;
File.WriteAllBytes(@"C:\Users\Admin\Desktop\New folder\IMAGES\" + i + ".tiff", imgg);
}
如果您使用MS SQl数据库,则可以使用:
using System.Data.Sql;
referance并使用了MYSql的sqlkeyword instaent
Eg----> SqlConnection, SqlCommand,SqlDataReader