@Vadim997

Как добавить изображение в базу данных, не сохраняя его в директорию?

Необходимо добавить изображение в базу данных, и не сохранять его в директории. И желательно безопасным способом.
  • Вопрос задан
  • 2787 просмотров
Пригласить эксперта
Ответы на вопрос 3
@WebEditor
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Сохранение бинарных данных в базе данных MySQL</title>
</head>
<body>
<?php
 
// Код, который будет выполняться, если форма была оправлена:
if ($_POST['submit']) {
 
    // подключение к базе данных
    // (возможно, вам придется настроить имя хоста, имя пользователя и пароль)
    $dbh = new mysqli("localhost", "root", "", "imagesstore");
 
    if(mysqli_connect_errno())
    {
        exit("Ошибка подключения к базе данных MySQL: Сервер база данных не доступен!<br>
        Проверте параметры подключения к базе данных.");
    }
 
    $data = addslashes(fread(fopen($_FILES['file']['tmp_name'], "r"), 
    filesize($_FILES['file']['tmp_name'])));
 
    $_POST['form_description'] = trim($_POST['form_description']);
    $size = filesize ($_FILES['file']['tmp_name']);
 
    $result=$dbh->prepare("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) 
  "."VALUES ('".$_POST['form_description']."',
  '".$data."',
  '".$_FILES["file"]["name"]."',
  '".$size."',
  '".$_FILES["file"]["type"]."')");
 
  if(!$result) exit("Ошибка выполнения SQL запроса!");
 
  $result->execute(); 
  $id = $dbh->prepare();
 
  echo "<p>Этот файл имеет следующий идентификатор (ID) в базе данных: <b>".$id."</b>";
 
} else {
 
  // отображаем форму для оправки новых данных:
?>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
Описание файла: <input type="text" name="form_description" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
Файл для загрузки/хранения в базе данных: <input type="file" name="file" size="40">
<p><input type="submit" name="submit" value="Отправить">
</form>
<?php
 
}
 
?> 
</body>
</html>


P.S.: Как искать в google
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ну, если уж через mysqli, то гораздо лучше так:
$size = filesize($_FILES['file']['tmp_name']);
$data = fread(fopen($_FILES['file']['tmp_name'], "r"), $size);
$descr = trim($_POST['form_description']);
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$request = $dbh->prepare("INSERT INTO `binary_data` ".
        "(`description`, `bin_data`, `filename`, `filesize`, `filetype`) ".
        "VALUES (?, ?, ?, ?, ?)");
$resuest->bind_param('sbsis', $descr, $data, $name, $size, $type);
$request->execute();
$id = $dbh->insert_id;

P.S. Поиск в Google не заменяет голову.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Изображения. В базу. Добавлять. Не нужно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы