PHP即时上传到blob

时间:2012-07-11 11:40:27

标签: php mysql input upload blob

我有一个简单的输入表单,其中包含name =“pdf_statement”的输入类型=“file”。

我希望能够上传内容并即时插入数据库。由于这只是一个测试文件,我不担心安全性(我会在功能到位后添加)。

我已阅读http://php.net/manual/en/function.stream-get-contents.php,但无法使其发挥作用。我得到错误 fopen()期望参数1是字符串,给定数组和* stream_get_contents()期望参数1是资源,布尔给定*。

我很抱歉,如果这是显而易见的,但对于正在学习的人,我无法弄清楚我做错了什么。

<?php

include('session.php');

$provider      =$_POST['provider_id'];
$trd_period    =$_POST['trading_period_month'];
$pdf_statement =stream_get_contents(fopen($_FILES['pdf_statement'], 'r'));

$sql_qry="update rd_provider_statement
          set (pdf_statment='".$pdf_statement."', creation_user_id='SCO')
          where  provider='".$provider."' and trading_period_month='".$trd_period."'";
$sql_err_no=sql_select($sql_qry,$sql_res,$sql_row_count,$sql_err,$sql_uerr);    

?>

2 个答案:

答案 0 :(得分:1)

您需要以二进制模式打开文件:

fopen($_FILES['pdf_statement']['tmp_name'], 'rb')

或者您可以改为使用file_get_contents()

$pdf_statement = file_get_contents($_FILES['pdf_statement']['tmp_name']);

您还需要清理输入。使用mysql_real_escape_string()

答案 1 :(得分:0)

$_FILES['pdf_statement']是一个数组,不是包含可传递给fopen的文件路径的字符串。您还需要以二进制模式打开文件。

$pdf_statement = stream_get_contents(fopen($_FILES['pdf_statement']['tmp_name'], 'rb'));

值得指出的是,使用数据库来存储文件上传并不是一个好主意。文件系统是获取此信息的更好地方。