2013-10-14 50 views
1

所以我搜索了一些通過php表單下載文件到mysql的方法。這是我發現:在mysql中使用PHP上傳文件

www.w3schools.com/php/php_file_upload.asp

,但是這是上傳到不同的頁面,而不是MySQL的。現在我將代碼更改爲此刻:

<form method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 


if(isset($_POST['submit'])) { 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if($_FILES["file"]["size"] < 20000) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
    } 
?> 

我不知道如何將它上傳到mysql。 我做了谷歌它,但找不到任何幫助我。 我的數據庫看起來是這樣的:

任何人都可以向我解釋如何我的文件上傳到我的數據庫表?

+3

可以幫助http://bytes.com/topic/php/insights/740327-uploading-files-into-mysql-database-using-php –

+0

@HaimEvgi謝謝。我會看看它。儘管我仍然接受其他答案。 – Loko

+0

看這個例子,問題是通過file_get_contents或其他方法將文件讀取到變量,並將二進制數據插入blob字段 –

回答

1

但是,如果您希望在表中存儲大數據,則需要爲文件數據創建單獨的表,因爲查詢以大BLOB數據表非常緩慢。 例如帶有列id(int)和數據(blob)的文件夾表'文件' 然後使用參數和排序對主表進行查詢,然後僅通過id向表'文件'提供數據(向主表添加列file_id的舉例) 文件名:

<?php 
// Allowed extension for upload 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 

$link = mysqli_connect("myhost", "myuser", "mypassw", "mybd") or die("Error " . mysqli_error($link)); 

if (isset($_POST['submit'])) { 
    $filename = $_FILES["file"]["name"]; 
    // Get extension with http://www.php.net/manual/en/function.pathinfo.php 
    $extension = pathinfo($filename, PATHINFO_EXTENSION); 
    // Check file size in bytes and for allowed extensions 
    if ($_FILES["file"]["size"] < 20000 && in_array($extension, $allowedExts)) { 
     if ($_FILES["file"]["error"] > 0) { 
      echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
     } else { 
      // Get file size 
      $size = $_FILES["file"]["size"]; 
      // Read file to var 
      $file_data = file_get_contents($_FILES["file"]["tmp_name"]); 
      // Prepare sql 
      $prepare = mysqli_prepare($link, 'INSERT INTO yourtable(`name`,`type`,`size`,`content`) VALUES(?,?,?,?)'); 
      // bind variables for replace ? in query with types 
      // s - string, i - integer, b- blob (for file data), d - for double 
      mysqli_stmt_bind_param($prepare, 'ssib', $filename, $extension, $size, $file_data); 
      // execute query 
      mysqli_stmt_execute($prepare); 
     } 
    } else { 
     echo "Invalid file"; 
    } 
} 
?> 
+0

你可以通過一些描述來改善你的答案:) – Federico

+0

這是錯誤的:** $ file_data = file_get_contents($ _ FILES [「file」] [「name」]); ** YOu應該讀取「tmp_name」和不是「名稱」 –

+0

O_o是它的我的錯誤,固定thx $) –