Mysqli prepare 语句将图像插入中断到数据库中


Mysqli prepare statement breaks image insert into database

我有一个SQL语句,在我尝试将其更改为SQL准备语句之前,它运行良好。

这是旧的插入:

$sql = "INSERT INTO items (seller, post_date, expiration_date, image, description, name, category, startBid, buyPrice, minPrice, sold) VALUES ('$id_user', NOW(), '$postDate', '$image', '$description', '$itemName', 0, '$startBid', '$buyNow', '$reservation', 0)";
$db->send_sql($sql);

我试图在这里做好准备:

$stmt = $mysqli->prepare("INSERT INTO items (seller, post_date, expiration_date, image, description, name, category, startBid, buyPrice, minPrice, sold) VALUES (?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, 0)";
$stmt->bind_param("isbssiddd", $id_user, $postDate, $image, $description, $itemName, $itemCategory, $startBid, $buyNow, $reservation);
$stmt->execute();
$stmt->close();

这两个语句都会执行,但它们会在数据库中产生不同的图像值。第一个语句的图像值是我期望的,可以检索/显示。与预准备语句一起放入的图像显示放入数据库的内容,但不显示为有效图像。图像字段是一个长斑点。我哪里出错了?谢谢!

解决了问题。这就是我获得$image的方式:

if (!empty($_FILES['inputPic']['tmp_name']))
{
    if ($_FILES['inputPic']['type'] == "image/jpeg" || $_FILES['inputPic']['type'] == "image/jpg" || $_FILES['inputPic']['type'] == "image/png")
    {
        if ($content = file_get_contents($_FILES['inputPic']['tmp_name']))
        {
            $image = addslashes($content);
        }
    }
}

我需要旧 mysql 语句中的 addslashes 函数,但现在准备时不需要。使其$image = file_get_contents($_FILES['inputPic']['tmp_name'])解决问题