我正在尝试使用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';
}
当我查看我的数据库时,它给了我成功;我在图像列下没有图像。我想知道为什么会这样。我可以知道原因吗?
答案 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)
您有以下选择:
您可以尝试检查mysql中的max_allowed_packet
大小。您尝试上传的文件可能大于允许的大小。
您可以尝试使用mysqli_stmt::send_long_data
。将blob保存到数据库非常有用。
最后,您可能希望使用mysql_stmt::$error
查看任何可以说明未插入blob的错误消息。
答案 2 :(得分:0)
使用预准备语句,未插入blob。但是,后来我尝试使用简单的声明。它奏效了。