0

次のスクリプトを使用して、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 データをダウンロードしますが、ここでのデータベースへの挿入は、PHP ではなく mysql プロシージャによって行われます。問題を引き起こしているのは挿入スクリプトだと思います。

4

3 に答える 3

1

Generally you wouldn't want to have any output code before your http header description. See http://php.net/manual/en/function.header.php

Either store the filename and other file information in a session then just access them in another page.

A few things that you need to check:

  • max_allowed_packet in my.ini should be equal or higher than the file size that you're expecting to store in the database
  • check to see if the data type that you selected fits the file that you will store. There's tiny blob, blog, medium blob and long blob. You might want to try the largest which is long blob.
  • I'm not sure about this one but did you already check if file_get_contents works:

mysql_real_escape_string(file_get_contents($file))

于 2012-07-12T06:50:11.937 に答える
1

mysql_real_escape_string()の代わりに 使ってみてくださいaddslashes()。それはあなたの問題を解決するかもしれません。

デバッグのためmd5()に、DB に挿入する前に文字列の を計算し、それを取得した後に計算することができます。つまり、ハッシュを正しく挿入していないため、DB に挿入するとバイナリ データが破損します。

補足:

  • そのような挿入を使用しないで、バインディングを使用してください - PhpでSQL変数をバインドする方法は?
  • エラーをチェックして停止します。単純にエコーしないでください(本番コードでこれを行っていることを願っています)
于 2012-07-12T06:30:22.303 に答える