二进制文件内容以php打印格式显示,但未保存在mysql中
我必须将文件从输入字段保存到数据库,我将这样做:二进制文件内容以php打印格式显示,但未保存在mysql中,php,mysql,file-upload,mysqli,Php,Mysql,File Upload,Mysqli,我必须将文件从输入字段保存到数据库,我将这样做: $mkey = mysqli_insert_id($mysqli); $i=0; while (isset($_FILES['file'.$i])) { $filepath = ini_get('upload_tmp_dir')."/".basename($_FILES['file'.$i]['tmp_name']); $filepath = addslashes($filepath);
$mkey = mysqli_insert_id($mysqli);
$i=0;
while (isset($_FILES['file'.$i])) {
$filepath = ini_get('upload_tmp_dir')."/".basename($_FILES['file'.$i]['tmp_name']);
$filepath = addslashes($filepath);
$handle = fopen($filepath, "rb");
$content = fread($handle, filesize($filepath));
$stmt = $mysqli->prepare("INSERT INTO attachment (filename,filecontent,mkey) VALUES (?,?,?)");
$stmt->bind_param("sbi",$_FILES['file'.$i]['name'],$content,$mkey);
$stmt->execute();
fclose($handle);
$i++;
}
没有发生错误,其他两个字段mkey和filename填充在数据库列中,但内容no,$content在我的浏览器中以print\r显示,我确信$content变量不是空的,但mysql没有显示任何内容。;-)
如果变量的数据大小超过允许的最大数据包大小(允许的最大数据包),则必须在类型中指定b,并使用以数据包形式发送数据
因此,我本人从未这样做过,但根据您的代码和:
尝试在SQL中存储二进制文件可能不是一个好主意;如果您确实决定要这样做,那么您至少应该首先将数据转换为十六进制。@l'l'l绝对不是一个好主意,但在这种情况下我必须处理这个问题。转换成十六进制?!当我想重新加载它时,请再次转换它??阅读有关这方面的信息,应该将二进制文件存储到数据库中,而且-检查代码时没有任何错误…请查看
bin2hex()
,然后当您想重新加载它时,请使用hex2bin()
。这里有一些类似的东西可能会有所帮助:。拉桑的建议也会起作用,但对于图像,它们需要先进行utf8\u编码!在为您研究之前,我也没有这样做:-)
$filepath = ini_get('upload_tmp_dir')."/".basename($_FILES['file'.$i]['tmp_name']);
$filepath = addslashes($filepath);
$handle = fopen($filepath, "rb");
$content = null;
$stmt = $mysqli->prepare("INSERT INTO attachment (filename,filecontent,mkey) VALUES (?,?,?)");
$stmt->bind_param("sbi",$_FILES['file'.$i]['name'], $content, $mkey);
while (!feof($handle)) {
// $maxPacketSize would be the size of your max packet setting for mysql,
// or something safely assumed to be below it
$stmt->send_long_data(1, fread($handle, $maxPacketSize));
}
fclose($handle);
$stmt->execute();