首页 > 解决方案 > MySQLi Prepared Statement:数据未插入数据库

问题描述

我正在开发一个文件上传应用程序。每个文件都上传到网站的/files/目录中,所以不直接上传到数据库中。我一直在尝试使用图像。问题是,我还想使用数据库来显示上传的每张图片,以及更多信息……并检查是否已经存在同名文件。

用户需要做什么:file使用输入类型选择他要上传的文件。

应用程序做什么:首先,它检查数据库中的文件名是否已被使用。如果没有,则继续使用该功能上传图片$_FILES并将其移动到/files/文件夹中。move_uploaded_file()然后,它在数据库表中创建一行,其中包含文件的类别 ( fcategory-> "Picture")、文件名 ( fname)、其字体真棒图标 ( ficon)、描述 ( fdesc) 和链接 ( flink)上/files/$_FILES['name']

这是我的表格:

<form action="#" method="POST" enctype="multipart/form-data">
   <input type="file" name="file">
   <input type="submit" class="btn" name="btn">
</form>

这是PHP代码:

<?php
   if (isset($_POST['btn']))
   {
      $file = $_FILES['file'];
      $stmt = $conn->prepare("SELECT * FROM files WHERE fname = ?");
      $stmt->bind_param("s", $file['name']);
      $stmt->execute();
      $res = $stmt->get_result();
      $num = $res->num_rows;
      if ($num == 0) {
         move_uploaded_file($file['tmp_name'], "files/".$file['name']);
         echo "<br><br>Image was uploaded.";
         $stmt2 = $conn->prepare("INSERT INTO files (fcategory, fname, ficon, fdesc, flink) VALUES (?, ?, ?, ?, ?)");
         $name = $file['name'];
         $link = "https://LINKTOWEBSITE.COM/files/".$name;
         $stmt2->bind_param("sssss", "Imagine", $name, "fa-image", "No description.", $link);
         $stmt2->execute();
         $stmt2->close();
         $stmt->close();
      }
      else
      {
         echo "<br><br>Choose another name for the image.";
         $stmt->close();
      }
   }
?>

我决定不提供我网站的链接。这就是为什么我将其替换为LINKTOWEBSITE.COM

问题是,数据没有插入到数据库中,但文件被插入到了/files文件夹中。可能是因为我使用了两个准备好的语句,一个嵌套到另一个?第一条语句,即检查现有文件的语句,运行良好。我能做些什么?

如果您需要更多信息,请发表评论,我会尽快编辑问题。太感谢了!

标签: phpmysqlfilemysqliprepared-statement

解决方案


推荐阅读