php - 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
文件夹中。可能是因为我使用了两个准备好的语句,一个嵌套到另一个?第一条语句,即检查现有文件的语句,运行良好。我能做些什么?
如果您需要更多信息,请发表评论,我会尽快编辑问题。太感谢了!
解决方案
推荐阅读
- dll - 如何使用ILSpy反编译查看Nuget包dll源码
- php - WCF 服务 PHP 客户端
- android - CameraManager 仅提供 2 个摄像头 ID,但一个设备具有三个物理摄像头。为什么?
- xpath - 查找包含文本的定位器(Robotframework)
- java - Cassandra 性能对于两个应用程序主机是不同的
- python - OR-Tools 和 Python 中的 NoCycle 约束
- clojure - 将集合指定为每个值中的一个
- apache-poi - 使用“Row.MissingCellPolicy.RETURN_BLANK_AS_NULL”时在行中出现红色下划线错误
- google-ads-api - 请求 google Ads Api 时如何解决 DEVELOPER_TOKEN_PROHIBITED 错误?
- scala - Scalatest - 如何在运行时创建并行测试