首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从php插入/读取blob数据

问从php插入/读取blob数据
EN

Stack Overflow用户
提问于 2012-07-12 14:24:38
回答 3查看 8.5K关注 0票数 0

我使用以下脚本来测试插入和读取blob数据。

插入脚本:

代码语言:javascript
复制
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();

下载脚本:

代码语言:javascript
复制
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。我认为是我的插入脚本导致了这个问题。

EN

回答 3

Stack Overflow用户

发布于 2012-07-12 14:30:22

尝试使用mysql_real_escape_string()而不是addslashes()。它可能会解决你的问题。

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

附注:

binding

  • 不要使用这样的插入,使用- How to bind SQL variables in Php?
  • check处理错误并停止,不要简单地回显它们(我希望您在您的生产代码中也是这样做的)
票数 1
EN

Stack Overflow用户

发布于 2012-07-12 14:50:12

通常,您不希望在http头描述之前有任何输出代码。请参阅http://php.net/manual/en/function.header.php

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

以下是您需要检查的几件事:

my.ini中的

  • max_allowed_packet应该等于或大于您希望存储在数据库中的文件大小
  • 检查您选择的数据类型是否适合您要存储的文件。有小斑点,博客,中等斑点和长斑点。你可能想试一下最大的,也就是长斑点。
  • 我不太确定这个问题,但是你已经检查过file_get_contents是否正常工作了吗:

mysql_real_escape_string(file_get_contents($file))

票数 1
EN

Stack Overflow用户

发布于 2014-08-26 01:00:26

这是我的另一个答案。

首先是更新查询:

准备文件(假设您的文件不是二进制文件):

代码语言:javascript
复制
    $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."'";

下载:

代码语言:javascript
复制
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;

希望这会有帮助=)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11446082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档