Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从sql表中的图像数据将图像文件保存到磁盘上_Php_Sql_Sql Server_Varbinarymax_File Put Contents - Fatal编程技术网

Php 从sql表中的图像数据将图像文件保存到磁盘上

Php 从sql表中的图像数据将图像文件保存到磁盘上,php,sql,sql-server,varbinarymax,file-put-contents,Php,Sql,Sql Server,Varbinarymax,File Put Contents,我有一个sql表,它以varbinary格式存储图像。我想从sql表中获取图像数据,并将其作为图像文件存储在我的系统中 $getPhotos = "SELECT Name, PhotoContent FROM [Photos]"; $resultPhotos = odbc_exec($con, $getPhotos); while($post = odbc_fetch_array($resultPhotos)){ $file

我有一个sql表,它以varbinary格式存储图像。我想从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));
}
上述代码将图像文件保存在系统上,但保存的图像已损坏

如何解决此问题


谢谢

好的,您可以在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)

4) 现在您可以看到下面的图像

4.1)会计形象

4.2)会计2图像

5) 所以,您可以在PHP中将所有映像复制到指定的驱动器,或者使用SSI,或者更改存储过程中要保存到磁盘的位置


希望这有帮助。

好的,您可以在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)

4) 现在您可以看到下面的图像

4.1)会计形象

4.2)会计2图像

5) 所以,您可以在PHP中将所有映像复制到指定的驱动器,或者使用SSI,或者更改存储过程中要保存到磁盘的位置


希望这有帮助。

在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; 
MYSql的引用和使用sqlkeyword安装

Eg----> SqlConnection, SqlCommand,SqlDataReader

在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; 
MYSql的引用和使用sqlkeyword安装

Eg----> SqlConnection, SqlCommand,SqlDataReader

我真的不明白。图像是否存在于文件服务器上,并且您希望复制文件。或者PhotoContent中的数据就是照片的内容?你能给我举个内容的例子吗。。photocontent中的数据是照片的内容,如果需要剥离
data:image/jpeg,则以varbinary(max)格式存储在sql表中;base64
您的数据根本不是二进制的。事实上,这不是一张原始图片,而是一张base64序列化的图片。因此,您需要先对其进行base64解码。顺便说一句,我希望在您调用
$fileName=“D:\\Images\\\”$post['Name']之前仔细验证
$post['Name']
。我不需要解释这个巨大的安全漏洞,否则的话,我真的不明白。图像是否存在于文件服务器上,并且您希望复制文件。或者PhotoContent中的数据就是照片的内容?你能给我举个内容的例子吗。。photocontent中的数据是照片的内容,如果需要剥离
data:image/jpeg,则以varbinary(max)格式存储在sql表中;base64
您的数据根本不是二进制的。事实上,这不是一张原始图片,而是一张base64序列化的图片。因此,您需要先对其进行base64解码。顺便说一句,我希望在您调用
$fileName=“D:\\Images\\\”$post['Name']之前仔细验证
$post['Name']
。我不需要解释这个巨大的安全漏洞,否则的话。