为什么使用PHP上传的图像没有正确存储在longblob中

为什么使用PHP上传的图像没有正确存储在longblob中,php,mysql,image,file-upload,blob,Php,Mysql,Image,File Upload,Blob,我在MySQL数据库中存储.JPG图像时遇到问题。我使用下面的PHP代码将其存储到数据库中(以长blob形式)。我的代码似乎完全没有错误,除了图像仅存储在PHPMyAdmin上的36 B大小之外,一切似乎都正常运行 我希望图像要大得多(大概22MB) tmp_name是文件的临时路径,这就是为什么只看到几个字节 删除任何转义(包括addslashes) 使用file\u get\u contents($\u FILES['selectImage']['tmp\u name'])获取图像的

我在MySQL数据库中存储
.JPG
图像时遇到问题。我使用下面的PHP代码将其存储到数据库中(以长blob形式)。我的代码似乎完全没有错误,除了图像仅存储在PHPMyAdmin上的36 B大小之外,一切似乎都正常运行

我希望图像要大得多(大概22MB)





tmp_name
是文件的临时路径,这就是为什么只看到几个字节

  • 删除任何转义(包括
    addslashes
  • 使用
    file\u get\u contents($\u FILES['selectImage']['tmp\u name'])
    获取图像的实际内容以插入数据库

通常情况下,将blob存储在数据库中是非常必要的,最好存储路径(就像您当前所做的那样)。如果选择路径路由,则需要使用类似的方法将文件移动到持久位置

tmp\u name
是文件的临时路径,这就是为什么您只看到几个字节

  • 删除任何转义(包括
    addslashes
  • 使用
    file\u get\u contents($\u FILES['selectImage']['tmp\u name'])
    获取图像的实际内容以插入数据库

通常情况下,将blob存储在数据库中是非常必要的,最好存储路径(就像您当前所做的那样)。如果选择路径路由,则需要使用类似的方法将文件移动到持久位置

这可能不是您的主要问题,但是在将图像传递到base64_encode之前不要转义它——这是没有必要的,而且它可能会损坏您的图像。@Martin我实际上已经尝试过了,没有使用字符串转义,也使用了老式的addslahes()方法。所发生的一切是BLOB变成了34 B或32 B。我应该再试一次吗?这可能不是您的主要问题,但在将图像传递给base64_encode之前不要对其进行转义--没有必要,它可能会损坏您的图像。@Martin实际上我已经尝试过了,没有使用字符串转义,也使用了老式的addslahes()方法。所发生的一切是BLOB变成了34B或32B。我应该再试一次吗?谢谢,我将尝试编译这个。我宁愿将其存储为文件路径,因为我以前已经成功地实现了这一点。然而,我首先需要在启动页面时了解持久性是如何工作的。这只是暂时的。没问题,如果你有任何后续问题,请告诉我,我现在可以投票澄清。我得走一会儿才能给你打勾。我不会忘记的。显然这很糟糕。奇怪的是,它现在存储的图像比我电脑上的图像大。base64编码会让你的数据膨胀33%。比二进制等价物少很多字符;)谢谢,我会尝试编译这个。我宁愿将其存储为文件路径,因为我以前已经成功地实现了这一点。然而,我首先需要在启动页面时了解持久性是如何工作的。这只是暂时的。没问题,如果你有任何后续问题,请告诉我,我现在可以投票澄清。我得走一会儿才能给你打勾。我不会忘记的。显然这很糟糕。奇怪的是,它现在存储的图像比我电脑上的图像大。base64编码会让你的数据膨胀33%。比二进制等价物少很多字符;)
<?php
require '../FirstWebsite/CommonFunctions.php';
DB_Connect();
$dblink = DB_Connect();
?>
<html>
<body>
    <form method="post" enctype="multipart/form-data">
        <br/>
        <input type="file" name="selectImage">
        <br/>
        <input type="submit" name="submitImage" value="submit">
    </form>
    <?php
    if(isset($_POST['submitImage'])){
        if(getimagesize($_FILES['selectImage']['tmp_name'])==FALSE){
            echo 'please select an actual image';
        }
        else{
            $getImage = mysqli_real_escape_string($dblink,                        $_FILES['selectImage']['tmp_name']);
            $name = mysqli_real_escape_string($dblink, $_FILES['selectImage']['name']);
            $image = base64_encode($getImage);
            saveImage($name, $image, $dblink);
        }
    }
    function saveImage($name, $image, $dblink){
        $query = "INSERT INTO trialtable2 (caption, actualpicture) VALUES       ('$name','$image')";
        $queryCheck = mysqli_query($dblink, $query);
        if($queryCheck == TRUE){
            echo '<br/> uploaded';
        }
        else{
            echo '<br/> not uploaded';
        }
    }
    ?>
</body>
</html>