【发布时间】:2015-06-19 18:21:42
【问题描述】:
$fileCount = count($_FILES);
for ($i = 0; $i < $fileCount; $i++) {
$fp = fopen($_FILES["file_".$i]['tmp_name'], 'rb');
$stmt4 = $dbh - > prepare("INSERT INTO files_tbl (pin,remarks,fileblob,file_type,nameoffile,filesize) VALUES (?,?,?,?,?,?)");
$stmt4 - > bindValue(1, $pin, PDO::PARAM_STR);
$stmt4 - > bindValue(2, $remarks, PDO::PARAM_STR);
$stmt4 - > bindParam(3, $fp, PDO::PARAM_LOB);
$stmt4 - > bindParam(4, $_FILES["file_".$i]['type'], PDO::PARAM_STR);
$stmt4 - > bindValue(5, $_FILES["file_".$i]['name'], PDO::PARAM_STR);
$stmt4 - > bindValue(6, $_FILES["file_".$i]['size'], PDO::PARAM_STR);
$stmt4 - > execute();
}
这就是我在 php 中将文件作为 blob 插入的方式。它正在保存文件,但没有正确保存。当我说它没有正确保存时,我的意思是在此过程中出现了问题。当我比较使用我的项目保存文件和在 XAMPP 中手动添加文件时,fileblob 存在差异,例如我在 xampp 中手动保存文件时,fileblob 为[BLOB - 488.9 KiB],当我使用项目时变为[BLOB - 479.2 KiB]。我认为这是我尝试从数据库显示文件时显示空白页的原因(当我显示的文件是我使用项目插入的文件时)但是如果我尝试显示的文件是我在 xampp 中手动插入的文件它正在显示文件。
我的插入可能有什么问题?为什么我没有保存正确的 blob
UPDATE
<input type="file" id="filecontent" name="filecontent" multiple="">
ajax
var file = $('#filecontent')[0].files;
for (var i = 0; i < file.length; i++) {
formData.append("file_" + i, file[i]);
//more data are passed to formData
//formData.append("file", file[i]);
console.log(file[i]);
}
$.ajax({
url: '../include/AddNew.php',
type: 'POST',
dataType: "json",
data: formData,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: function(data) {
console.log(data);
alert(data.message);
//window.location.reload(true);
},
error: function(data) {
//alert("Error!"); // Optional
}
});
UPDATE
当我尝试将print_r($_FILES); 放在for ($i = 0; $i < $fileCount; $i++) { 行之前时,输出为
Array
(
[file_0] => Array
(
[name] => whomovedmycheese - Copy.pdf
[type] => application/pdf
[tmp_name] => C:\Users\HogRider\xampp\tmp\phpE775.tmp
[error] => 0
[size] => 500624
)
[file_1] => Array
(
[name] => whomovedmycheese.pdf
[type] => application/pdf
[tmp_name] => C:\Users\HogRider\xampp\tmp\phpE786.tmp
[error] => 0
[size] => 500624
)
)
UPDATE
【问题讨论】:
-
能否贴出SQL命令的输出
describe files_tbl; -
可能不相关,但你为什么混合
bindParam()和bindValue()?您还应该在循环之前只准备一次语句,如果您使用bindParam(),您也可以在循环之前执行此操作,这样您只需在循环中设置变量。 -
@jeroen 我只在 BLOB 上使用了参数,因为那是我在教程中看到的。我不知道这有什么并发症。我将重新制作代码并将其更改为值。在这个问题上马上回到你身边..
-
@RaphaelSchweikert 我更新了我保存表格的屏幕截图的问题
-
@HogRider 我想查看列类型。描述给你。