文件已上传到文件夹但路径未存储到数据库中

Posted

技术标签:

【中文标题】文件已上传到文件夹但路径未存储到数据库中【英文标题】:file is uploaded into folder but path is not stored into database 【发布时间】:2017-12-16 06:03:59 【问题描述】:

我试图将图像插入服务器文件夹,然后将路径插入数据库,但我可以将文件上传到服务器文件夹,无法将任何东西存储到数据库中,例如文件类型、文件大小和文件名(我的意思是路径)。我是 php 新手,请尝试帮助我。

使用php和mysql

index.php

<form action="upload.php" method="post" enctype="multipart/form-data">
 <input type="file" name="file" />
 <button type="submit" name="btn-upload">upload</button>
</form>

上传.php

if(isset($_POST['btn-upload']))
    

 $file = rand(1000,100000)."-".$_FILES['file']['name'];
 $file_loc = $_FILES['file']['tmp_name'];
 $file_size = $_FILES['file']['size'];
 $file_type = $_FILES['file']['type'];
 $folder="uploads/";

 // new file size in KB
 $new_size = $file_size/1024;  
 // new file size in KB

 // make file name in lower case
 $new_file_name = strtolower($file);
 // make file name in lower case

 $final_file=str_replace(' ','-',$new_file_name);

 if(move_uploaded_file($file_loc,$folder.$final_file))
 
  $sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
  $smt=$db->prepare($sql);
 $smt->execute();

view.php

<table  border="1">
    <tr>
    <th colspan="4">your uploads...<label><a href="index.php">upload new files...</a></label></th>
    </tr>
    <tr>
    <td>File Name</td>
    <td>File Type</td>
    <td>File Size(KB)</td>
    <td>View</td>
    </tr>
    <?php
 $sql="SELECT * FROM tbl_uploads";
 $result=$db->query($sql);
    while($row=$result->fetch_object())
 
  ?>
        <tr>
        <td><?php echo $row['file'] ?></td>
        <td><?php echo $row['type'] ?></td>
        <td><?php echo $row['size'] ?></td>
        <td><a href="uploads/<?php echo $row['file'] ?>" target="_blank">view file</a></td>
        </tr>
        <?php
 
 ?>
    </table>

表格详情 enter image description here

 CREATE TABLE `tbl_uploads` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `file` varchar(100) NOT NULL,
      `type` varchar(10) NOT NULL,
      `size` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

【问题讨论】:

尝试回应您的查询。并告诉你遇到了哪个错误。 你有什么错误吗? 文件插入成功没有错误但是任何信息都没有存储在数据库中 @TarangP 我已经完成了,但没有错误。 您的查询是否正确?尝试使用此查询直接将数据库插入 MySQL 数据库。检查这是否有效。此外,回显所有 3 个变量以查看它们是否具有您需要的正确值。 【参考方案1】:

我执行代码。 问题出在您的架构中

Data truncation: Data too long for column 'type' at row 1

尝试运行以下而不是执行插入它会插入

ALTER TABLE `users` CHANGE `size` `size` INT(30) NOT NULL;

【讨论】:

即使我无法在数据库中存储值 size` int(11) NOT NULL,并且你传递了超过 10 个所以 sql 语句产生错误。如果你把它改成 varchar(300) 会更好。而且它会正常工作。并且还参考这个w3schools.com/PhP/php_mysql_prepared_statements.asp【参考方案2】:

如果你已经成功连接到你的数据库,你将不得不修改你的 sql 语句如下:

$stmt = $db->prepare("INSERT INTO tbl_uploads(`file`,`type`,`size`) VALUES(?,?,?))"; 

$stmt->bindParam(1, $final_file);
$stmt->bindParam(2, $file_type);
$stmt->bindParam(3, $new_size);

if($stmt->execute())

     echo 'Success';

else

     echo 'Failed!';

还要确保您有适当的字段类型和足够的长度来将您的数据存储在表中。

如果您尚未建立并验证您的数据库连接,您可以通过将以下代码添加到脚本顶部或在添加记录之前进行验证:

<?php
$dsn = 'mysql:host=localhost;dbname=YOURDBNAME';

try
  $dbh = new PDO($dsn, 'db_username', 'db_password');
catch (PDOException $e)
  die($e->getMessage());

确保将 YOURDBNAME、db_username、db_password 替换为适当的值。

您还应该查看以下参考资料: http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

以上是关于文件已上传到文件夹但路径未存储到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

我正在尝试上传图片,但图片未添加到云 Firestore,它已上传到 Firebase 存储但未显示在 React 应用程序中

将文件上传到 Firebase 存储错误 404 -“未找到。无法获取对象”

Laravel 文档多次上传未保存到数据库

无法在视图中显示或检索文件,该文件以路径的形式上传到数据库中。 (使用 laravel )

文件使用无服务器 api 成功上传到 s3,但未打开(已损坏)

图像文件成功上传到文件夹,但文件名未保存在数据库中