为什么这个mysqli语句无法将图像插入数据库?

时间:2015-12-14 12:25:12

标签: php mysqli

我正在尝试使用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';    
        }

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

3 个答案:

答案 0 :(得分:0)

你能尝试这样吗,希望它能起作用

 $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();

答案 1 :(得分:0)

您有以下选择:

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

  2. 您可以尝试使用mysqli_stmt::send_long_data。将blob保存到数据库非常有用。

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

答案 2 :(得分:0)

使用预准备语句,未插入blob。但是,后来我尝试使用简单的声明。它奏效了。