【发布时间】:2021-12-24 02:26:33
【问题描述】:
我创建了一个数据库,用于存储有关图像以及图像本身的各种数据。我有五个键(id, name, size, format, file)。 id 是自动递增的。 file 是一个 BLOB 类型的值 - (mediumblob)。休息是其各自的类型。奇怪的是,除了 BLOB 图像本身之外,所有其他变量都成功写入数据库。
等待用户使用$_POST上传图片:
if(isset($_POST['file_one_submit'])){
$post = 'file_one_input';
}
定义所有变量。包括 $file 变量:
$file = file_get_contents($_FILES[$post]['tmp_name']);
然后我进行查询,用新信息替换数据库中的记录:
$stmt = $conn -> prepare("REPLACE INTO `images` (id, name, size, format, file) VALUES(?, ?, ?, ?, ?);");
$stmt -> bind_param("isisb", $id, $name, $size, $format, $file);
$stmt -> execute();
执行查询后,数据库中的所有记录都成功更新,但应包含 BLOB 数据的 file 列除外。我认为$post 变量可能定义不正确,但例如获取上传文件的名称是可行的:
upload_name = $_FILES[$post]['name'];
我尝试回显 $file 变量以检查其内容,并得到一长串数据,我认为这些数据是在使用 file_get_contents() 函数转换为 BLOB 期间生成的正确字符串。
我检查了文件的大小没有超出mediumblob BLOB 类型的能力。我还尝试使用this 帖子检查我的代码中的错误,但没有成功。运行代码时,页面上不会出现错误或警告。我还使用E_STRICT 启用了错误/警告检查,但仍然没有显示输出。
【问题讨论】:
-
您最终得到的记录中
file的值是多少,您想要存储的值是多少?另外,请在您的数据库中运行show create table images并向我们展示该表的外观。 -
您在问题中遗漏了非常重要的信息。服务器上
max_allowed_packet的大小是多少,$file的字节大小是多少。请将此信息添加到问题中。 -
您将使用该文件做什么?如果它将在网页中使用,请参阅我的答案。如果它会以其他方式使用,我可能会有不同的建议。