【问题标题】:Why is this mysqli statement unable to insert image into the database?为什么这个 mysqli 语句无法将图像插入数据库?
【发布时间】:2015-12-17 13:12:12
【问题描述】:

我正在尝试在 php 中使用 mysqli 将图像保存到我的数据库中。我做了一个演示,我使用了一个简单的 mysqli_query() 并且它有效。但是,当我尝试使用准备好的语句做同样的事情时;它行不通。这是我的代码:

$uploadedImage = array();
        $uploadedImageName = array();

        if(isset($_FILES['files']['tmp_name'])){

            $num_files = count($_FILES['files']['tmp_name']);
            echo $num_files;


            if($num_files == 5){
                for($i = 0; $i < $num_files; $i++){

                    $imgName = addslashes($_FILES['files']['tmp_name'][$i]);
                    $name = addslashes($_FILES['files']['name'][$i]);

                    if($_FILES['files']['tmp_name'][$i] != ""){

                        $imageContents = file_get_contents($imgName);
                        $encodedImage[$i] = base64_encode($imageContents);

                        $filename[$i] = $_FILES['files']['name'][$i];

                        array_push($uploadedImageName, $filename[$i]);
                        array_push($uploadedImage, addslashes($encodedImage[$i]));

                        echo "I got the file..<br>";

                        echo ",,".$filename[$i];
                        echo $encodedImage[$i];
                    }   
                }
            } else{
                echo "Number of files should be equal to 5";
                return;
            }



$sql = "INSERT INTO profile(first_name, middle_name, surname, imgname1, img1, imgname2, img2, imgname3, img3, imgname4, img4, imgname5, img5) VALUES (?, ?, ?,?, ?,?, ?,?, ?,?, ?,?, ?)";

        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param("ssssbsbsbsbsb", $firstName, $middleName, $surname, $uploadedImageName[0], $uploadedImage[0], $uploadedImageName[1], $uploadedImage[1], $uploadedImageName[2], $uploadedImage[2], $uploadedImageName[3], $uploadedImage[3], $uploadedImageName[4], $uploadedImage[4]); // bind variables..    


if($stmt->execute()){
            echo 'success';
        } else{
            eccho 'failure';    
        }

然而,当我查看我的数据库时,它给了我成功;我在图像列下没有图像。我想知道为什么会这样。我可以知道原因吗?

【问题讨论】:

  • 错误信息是什么?名字,中间名被插入?
  • 您是否在插入查询的上方仅打印了 $uploadedImageName ?你得到了适当的回应吗?
  • 是的,我在我的 php 中得到了 base64 编码的图像
  • @n01ze 是的。除了作为 blob 的图像之外,所有字段都被插入
  • 我真的不喜欢将图像存储在数据库中。 stackoverflow.com/questions/492549/…

标签: php mysqli


【解决方案1】:

你可以这样尝试吗,希望它会工作

 $stmt = $conn->prepare("INSERT INTO your_table( imgname1) VALUES ( ? )");  //imgname1 is a blob column
 $stmt->bindParam(1, $uploadedImageName[0], PDO::PARAM_LOB);
 $conn->errorInfo();
 $stmt->execute();

【讨论】:

  • 好的。只需一秒钟。我有很多领域的人。我认为这不会有帮助。不过,我会努力的。
  • 致命错误:不能在语句中通过引用传递参数 3
  • 它应该像这样工作..我不明白为什么??! ..它现在让我发疯。它使用通常的语句 bt 而不是准备好的语句,如果我在这里使用语句;代码正在破坏。
  • 即使 bindColumn 也不起作用。它只是不适用于图像。我正在数据库中获取 imageName。
【解决方案2】:

您有以下选择:

  1. 您可以尝试检查 mysql 中的max_allowed_packet 大小。您尝试上传的文件可能大于允许的大小。

  2. 您可以尝试使用mysqli_stmt::send_long_data。这对于将 blob 保存到数据库很有用。

  3. 最后,您可能希望使用 mysql_stmt::$error 查看任何错误消息,以说明您的 blob 未插入的原因。

【讨论】:

  • 他们很好。这不是它不起作用的原因,
【解决方案3】:

使用准备好的语句,没有插入 blob。但是,后来我尝试使用简单的语句。它奏效了。

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 2019-09-04
    • 2013-11-19
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2019-10-13
    相关资源
    最近更新 更多