使用PHP准备的语句将图像(blob)插入MySQL数据库

qv7cva1a  于 2023-01-25  发布在  Mysql
关注(0)|答案(2)|浏览(151)

我需要插入一个图像到MySQL数据库使用准备statements ...一切都插入除了图像

$name = mysqli_real_escape_string($conn, $_POST['name']);
    $category = mysqli_real_escape_string($conn, $_POST['category']);
    $privacy = mysqli_real_escape_string($conn, $_POST['privacy']);
    $maxmembers = mysqli_real_escape_string($conn, $_POST['maxmembers']);
    $description = mysqli_real_escape_string($conn, $_POST['description']);
    $file = $_FILES['avatar']['tmp_name'];
    $image = addslashes(file_get_contents($_FILES['avatar']['tmp_name']));
    $image_name =addslashes($_FILES['avatar']['tmp_name']);
    $image_size = getimagesize($_FILES['avatar']['tmp_name']);


$sql = "INSERT INTO hjuma_groups (name, description, category, privacy, maxmembers, owner, avatarname, avatar) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
            $stmt = mysqli_stmt_init($conn);
            if (!mysqli_stmt_prepare($stmt, $sql)) {
              echo "SQL error";
            }else {
              mysqli_stmt_bind_param($stmt,"sssssssb", $name,$description,$category, $privacy,$maxmembers, $owner, $image_name, $image);
              mysqli_stmt_execute($stmt);
            }
jljoyd4f

jljoyd4f1#

我认为您遗漏的拼图块是图像数据上的base64_encode,如下所示:

$name =             $_POST['name']);
$category =         $_POST['category'];
$privacy =          $_POST['privacy'];
$maxmembers =       $_POST['maxmembers']);
$description =      $_POST['description']);
$name =             $_FILES['avatar']['name'];
$image_name =       $_FILES['avatar']['tmp_name'];
$image =            base64_encode( file_get_contents( $image_name ) );
$image_size =       getimagesize( $image_name );


$sql = "insert into `hjuma_groups` 
        ( `name`, `description`, `category`, `privacy`, `maxmembers`, `owner`, `avatarname`, `avatar`) 
        values 
        (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = mysqli_stmt_init($conn);

if( !mysqli_stmt_prepare( $stmt, $sql ) ) {
    echo "SQL error";
}else {
    mysqli_stmt_bind_param( $stmt, "sssssssb", $name, $description, $category, $privacy, $maxmembers, $owner, $image_name, $image );
    mysqli_stmt_execute($stmt);
}
44u64gxh

44u64gxh2#

你不需要插入你的图像通过编码到base64_encode它可以很容易地工作通过这样做

$image=file_get_contents($_FILES['your_image_name']['tmp_name']);

然后在预准备语句中插入如下数据

mysqli_stmt_bind_param($stmt,"s",$image);

插入图像作为blob数据表中的存储。
然后像这样显示在你的网页上

<?php 
   echo '<img src="data:image/jpeg;base64,' . base64_encode($row['your_blob_image_table']) . '" alt="" />';

?>

注意:mysqli_escape_真实的_string和addslashes在预准备语句中会产生问题,请不要使用它。如果你喜欢我的答案,请把我的答案放在1号。谢谢

相关问题