2012-07-11 110 views
0

我有一個簡單的輸入表單,其中包含名稱=「pdf_statement」的輸入類型=「文件」。PHP上傳到blob動態

我希望能夠上傳內容並即時插入到數據庫中。由於這只是一個測試文件,我並不擔心安全問題(一旦功能到位,我會添加)。

我已閱讀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);  

?> 
+0

您想訪問$ _FILES ['pdf_statement'] ['tmp_name'] – gunnx 2012-07-11 11:46:59

+0

在大多數環境中數據庫空間比普通磁盤更昂貴。爲什麼不把PDF保存到文件系統並在數據庫中存儲指針? – 2012-07-11 11:48:59

回答

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()

+0

謝謝你,如果我echo $ pdf_statement我得到一個字符的負載,所以我知道它正在被正確讀取,但沒有列正在更新表中? – user1488434 2012-07-11 12:05:10

+0

您是否嘗試檢查錯誤變量以查看查詢中是否有錯誤? – Ruel 2012-07-11 12:13:32

+0

您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,以便在'i ??????? v ?? c?@?l?§?1 ???#???????? ?X - ????????????????????????????????????????????????????????????????????????????????????????字符串被處理。 im使用set pdf_statement ='「。$ pdf_statement。」' – user1488434 2012-07-11 12:24:06

0

$_FILES['pdf_statement']是一個數組,而不是包含文件路徑的字符串,您可以傳遞給fopen。您還需要以二進制模式打開文件。

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

值得指出的是,使用數據庫來存儲文件上傳不是一個好主意。文件系統是這個信息更好的地方。