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

Здравствуйте! Я загружаю изображения в базу данных, но также добавляю текстовые данные. Я написал следующий код, однако он выдает ошибку. Вот код: 

```php
if (!empty($_FILES['img']['tmp_name'])) $img = addcslashes(file_get_contents($_FILES['img']['tmp_name'])){
    $sql = "INSERT INTO ".$dbtable." (name, description, description_2, date, card_img, img) VALUES ('$title', '$description', '$description_2', '$date', '$img', '$card_img')"
};
```

Ошибка, которую я получаю: 

```
Fatal error: Array and string offset access syntax with curly braces is no longer supported in /Users/mihail_razmyslovitch/Desktop/Проэкты web design/project-fest/admin/news-admin.php on line 36
```

Как можно исправить эту проблему?
  • 2 октября 2024 г. 18:44
Ответы на вопрос 2
Ошибка, с которой вы столкнулись, связана с неправильным использованием фигурных скобок. В вашем коде есть несколько проблем, которые нужно исправить. Вот исправленная версия вашего кода:

```php
if (!empty($_FILES['img']['tmp_name'])) {
    $img = addcslashes(file_get_contents($_FILES['img']['tmp_name']), "'");
    
    $sql = "INSERT INTO ".$dbtable." (name, description, description_2, date, card_img, img) VALUES ('$title', '$description', '$description_2', '$date', '$card_img', '$img')";
    
    // Выполнение запроса к базе данных (например, с помощью mysqli или PDO)
    // $result = mysqli_query($connection, $sql);
}
```

### Важные моменты, которые были исправлены:

1. **Использование фигурных скобок**: Вместо фигурной скобки после `addcslashes`, следует использовать обычные скобки для завершения вызова функции. Также в `$sql` строках не было необходимой точки с запятой после строки на уровне функции.

2. **Экранирование символов**: В `addcslashes` добавлен второй параметр, чтобы экранировать одинарные кавычки. Это важно, чтобы избежать ошибок SQL-инъекций, если строка содержит специальные символы.

3. **Выполнение запроса**: Не забудьте добавить выполнение SQL-запроса через библиотеку работы с БД (например, `mysqli` или `PDO`).

### Безопасность и альтернатива:

Хранить изображения в базе данных может быть не лучшей практикой. Обычно рекомендуется хранить изображения в файловой системе, а в базе данных хранить только путь к изображению. Это снизит нагрузку на базу данных и упростит резервное копирование и управление файлами. Если вы хотите следовать этому подходу, вот как это можно сделать:

1. Загружайте изображение на сервер (например, в папку `uploads/`).
2. В базе данных храните путь к этому изображению:

```php
$uploadDir = 'uploads/';
$uploadFile = $uploadDir . basename($_FILES['img']['name']);

if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadFile)) {
    // Файл успешно загружен, теперь можно сохранить путь в базе данных
    $sql = "INSERT INTO ".$dbtable." (name, description, description_2, date, card_img, img_path) VALUES ('$title', '$description', '$description_2', '$date', '$card_img', '$uploadFile')";
    
    // Выполнение запроса к базе данных
}
```

Таким образом, вы уменьшите размер базы данных и упростите работу с изображениями.
Синтаксис php if ( условие) {действия}
Похожие вопросы