2013-10-14 49 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 $) –