我使用以下脚本来测试插入然后读取blob数据。
插入脚本:
include('session.php');
$provider =$_POST['provider_id'];
$trd_period =$_POST['trading_period_month'];
$pdf_statement =stream_get_contents(fopen($_FILES['pdf_statement']['tmp_name'], 'rb'));
$pdf_statement_clean=addslashes($pdf_statement);
$insert="update rd_provider_statement
set pdf_statement='".$pdf_statement_clean."', creation_user_id='SCO'
where provider_id='".$provider."' and trading_period_month='".$trd_period."'";
mysql_query($insert);
mysql_query("COMMIT");
echo mysql_error();
下载脚本:
include('session.php');
//Gather Post Variables
$TP_Month =$_POST["trading_period_month"];
$provider =$_POST["provider_id"];
$TP_format =substr($TP_Month, 0, 7);
//Download Statement
$sql_qry="select *
from rd_provider_statement
where provider='".$provider."' and trading_period_month='".$TP_Month."'";
$sql_err_no=sql_select($sql_qry,$sql_res,$sql_row_count,$sql_err,$sql_uerr);
$row = mysql_fetch_assoc($sql_res);
$bytes =stripslashes($row['pdf_statement']);
header("Content-type: application/pdf");
header('Content-disposition: attachment; filename="'.$provider.'statement'.$TP_format.'"');
print $bytes;
但是,当下载文件时,由于它不是受支持的格式,因此无法打开。我在另一个页面上使用脚本的基础从数据库下载blob数据,但是这里插入数据库是由mysql过程而不是PHP完成的。我认为这是导致问题的插入脚本。
答案 0 :(得分:1)
尝试使用mysql_real_escape_string()
代替addslashes()
。它可能会解决你的问题。
对于调试,您可以在插入DB之前计算字符串的md5()
,然后再检索它。我打赌你会得到不同的哈希值,这意味着你没有正确插入它,并且你的二进制数据在插入数据库时会被破坏。
附注:
答案 1 :(得分:1)
通常,您不希望在http标头描述之前有任何输出代码。见http://php.net/manual/en/function.header.php
将文件名和其他文件信息存储在会话中,然后只在另一页中访问它们。
您需要检查的一些事项:
mysql_real_escape_string(file_get_contents($file))
答案 2 :(得分:0)
这是我的替代答案。
首先是更新查询:
准备文件(假设您的文件不是二进制文件):
$tmpName = $_FILES["pdf_statement"]["tmp_name"];
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
fclose($fp);
$insert="update rd_provider_statement
set pdf_statement='".$data."', creation_user_id='SCO'
where provider_id='".$provider."' and trading_period_month='".$trd_period."'";
下载:
enter code here
$sql_qry="select provider_id, pdf_statement
from rd_provider_statement
where provider='".$provider."'
and trading_period_month='".$TP_Month."'";
$sql_err_no=sql_select($sql_qry,$sql_res,$sql_row_count,$sql_err,$sql_uerr);
$row = mysql_fetch_assoc($sql_res);
$name=$row['provider_id'];
$file=$row['pdf_statement'];
header("Content-Disposition: attachment; filename=\".$name_statement.$TP_format.\";" );
echo $file;
希望有帮助=)