2011-01-27 93 views

回答

8

假設一個整數ID的表結構和BLOB數據列,並假設MySQL的功能正在使用與數據庫的接口,你也許可以做這樣的事情:

$result = mysql_query 'INSERT INTO table (
    data 
) VALUES (
    \'' . mysql_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf')) . '\' 
);'; 

一句警告儘管如此,將數據庫存儲在數據庫中通常不被認爲是最好的想法,因爲它可能導致表膨脹,並且存在許多與其相關的其他問題。更好的方法是將文件移動到文件系統中的某處,並將路徑存儲到數據庫中而不是文件本身。

此外,使用mysql_ *函數調用是不鼓勵的,因爲這些方法被有效地棄用,並且沒有真正用比4.x更新的MySQL版本構建。您應該切換到mysqli或PDO。

UPDATE:mysql_ *功能棄用在PHP 5.x和是完全刪除在PHP中7!您現在別無選擇,只能切換到更現代的數據庫抽象(MySQLI,PDO)。我已經決定離開上述完整的歷史原因原來的答案,但實際上並不使用它

下面是如何在程序模式的mysqli做到這一點:

$result = mysqli_query ($db, 'INSERT INTO table (
    data 
) VALUES (
    \'' . mysqli_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf'), $db) . '\' 
);'); 

做的理想的方式是用MySQLI/PDO編寫語句。

+0

我的php代碼如下:$ fileSize = $ _FILES ['userfile'] ['size']; $ fileType = $ _FILES ['userfile'] ['type']; $ fp = fopen($ tmpName,'r'); $ content = fread($ fp,filesize($ tmpName)); (49,\「。$ esc。\」,0,$ esc = mysql_real_escape_string(file_get_contents($ fp)); $ query =「INSERT INTO table(id,data,Dealid)VALUES )「; – xcodemaddy 2011-01-27 09:24:05

+0

[`mysqli_query()`](http://php.net/manual/en/mysqli.query.php)需要db連接並作爲第一個參數。我從使用它的人身上看到了這個問答,作爲可能的重複。應該更新它以提供正確的語法;這對於未來的訪問者/新手來說,他們不知道它是如何工作的。 – 2017-04-01 14:46:56

-1
//Pour inserer : 
      $pdf = addslashes(file_get_contents($_FILES['inputname']['tmp_name'])); 
      $filetype = addslashes($_FILES['inputname']['type']);//pour le test 
      $namepdf = addslashes($_FILES['inputname']['name']);    
      if (substr($filetype, 0, 11) == 'application'){ 
      $mysqli->query("insert into tablepdf(pdf_nom,pdf)value('$namepdf','$pdf')"); 
      } 
//Pour afficher : 
      $row = $mysqli->query("SELECT * FROM tablepdf where id=(select max(id) from tablepdf)"); 
      foreach($row as $result){ 
       $file=$result['pdf']; 
      } 
      header('Content-type: application/pdf'); 
      echo file_get_contents('data:application/pdf;base64,'.base64_encode($file)); 
相關問題