无法在.SQL中的blob中存储.pdf文件

时间:2014-07-31 14:35:41

标签: php mysql blob

所以我试图将一个PDF文件上传到mySQL blob中,表格行被插入但是在fileContent中是mediumBlob类型,它总是显示为[BLOB 0 B],当下载文件时,它被下载0字节。我回应了$ content,它显示了pdf文件的特殊字符。

$erro = '';
$tipo = '';
if (isset($_POST['submit']) && isset($_POST['text']) && $_POST['text'] !== null && isset($_POST['userID']))
    {
        if(preg_match('/^[a-z0-9-]+$/',$_POST['text']) && strlen($_POST['text']) < 15 ) 
        {

            if (substr($_FILES['file']['name'], -3, 3) == "pdf" && $_FILES["file"]["size"] < 1000000) 
            {

              if ($_FILES["file"]["error"] > 0) 
              {
                $erro = "Problema: " . $_FILES["file"]["error"];
                $tipo = 'erro';
              } 
              else 
              {
                  $_FILES["file"]["name"] = $_POST['text'].'.pdf';
                  $erro = "Ficheiro guardado com sucesso.";
                  $tipo = 'sucesso';
               }
            }
            else 
            {
               $erro = "Apenas .PDF com menos de 10 Mb são permitidos!";
               $tipo = 'erro';
            }
        } 
        else
        {
            $erro = "Nome inválido";
            $tipo = 'erro';
        }

        if ($tipo == 'sucesso')
        {
            $content = $db->real_escape_string(file_get_contents($_FILES['file']['tmp_name']));

            if ($_FILES["file"]["size"] > 0)
            {
                $smt = $db->prepare('INSERT into uploads (userRefID,fileName,fileType,fileSize,fileContent,uploadDate) values(?,?,?,?,?,?)');
                $smt->bind_param('issibs', $_POST['userID'], $_FILES["file"]["name"], $_FILES["file"]["type"], $_FILES["file"]["size"], $content ,date(c));
                $smt->execute();
                $smt->close();
            }
        }



    }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据this comment,您不应直接在bind_param中传递blob,而应使用send_long_data

send_long_data的文档中可以看到一个例子:

$stmt = $mysqli->prepare("INSERT INTO messages (message) VALUES (?)");
$null = NULL;
$stmt->bind_param("b", $null);
$fp = fopen("messages.txt", "r");
while (!feof($fp)) {
    $stmt->send_long_data(0, fread($fp, 8192));
}
fclose($fp);
$stmt->execute();