Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制文件内容以php打印格式显示,但未保存在mysql中_Php_Mysql_File Upload_Mysqli - Fatal编程技术网

二进制文件内容以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();