Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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插入/读取blob数据_Php_Mysql_Pdf_Upload_Blob - Fatal编程技术网

从php插入/读取blob数据

从php插入/读取blob数据,php,mysql,pdf,upload,blob,Php,Mysql,Pdf,Upload,Blob,我使用以下脚本测试插入和读取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=ad

我使用以下脚本测试插入和读取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完成的。我认为是我的插入脚本造成了问题。

尝试使用mysql\u real\u escape\u字符串而不是addslashes。这可能会解决你的问题

为了进行调试,您可以在插入数据库之前计算字符串的md5,然后在检索它之后计算。我打赌你会得到不同的散列,这意味着你没有正确地插入它,当你插入数据库时,你的二进制数据会被破坏

旁注:

不要像那样使用插入,使用绑定- 检查错误并停止,不要简单地回显它们。我希望您在生产代码中这样做
通常,您不希望在http头描述之前有任何输出代码。看

在会话中存储文件名和其他文件信息,然后在另一个页面中访问它们

您需要检查以下几点:

my.ini中的max_allowed_数据包应等于或大于您希望存储在数据库中的文件大小 检查您选择的数据类型是否适合要存储的文件。有小斑点,博客,中等斑点和长斑点。您可能想尝试最大的一个,它是长斑点。 我不确定这一点,但您是否已经检查了文件内容是否有效:
mysql\u real\u escape\u stringfile\u get\u contents$file

以下是我的备选答案

首先是更新查询:

假设您的文件不是二进制文件,请准备该文件:

    $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;

希望有帮助=

在数据库中存储文件不是一个好主意:所以,如果您正在托管,并且没有其他方法在文件系统上存储/检索文件,您希望如何存储和检索文件?有时候,他们有那些严格的PHP/MySQL交易,或者他们对你上传的文件进行限制/过滤等等。我最初有MySQL\u real\u escape\u string,但在我无法工作后改为斜杠。md5检查返回了完全不同的哈希值。我不知道为什么。生产代码在出现错误时停止并回滚任何更改。。。由于这只是为了测试,我希望代码尽可能少,直到它是fulyl工作。数据库中的列是BLOB binary或TEXThas charset支持,可能会改变一些字符?中BLOB,也许我会使用mysql load_文件代替?您确定数据正确进入数据库吗?它是否适合在斑点领域?你有没有试着和phpMyadmin一起看?