У меня есть оператор 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); } } }
Мне нужна функция addlashes в старой инструкции mysql, но не тогда, когда она подготовлена. Сделать это $image = file_get_contents($_FILES['inputPic']['tmp_name'])
разрешил проблему