Подтвердить что ты не робот

Как загрузить изображения в базу данных MySQL с помощью PHP-кода

Я пытаюсь сохранить изображения в моей базе данных из формы HTML. Я написал PHP-код для выполнения этой задачи. Программа не генерирует никакого сообщения об ошибке, но также не вставляет данные изображения в базу данных MySQL. Просьба проверить это. Здесь я делюсь выдержкой из моего кода.

        /*-------------------
    IMAGE QUERY 
    ---------------*/


    $file   =$_FILES['image']['tmp_name'];
    if(!isset($file))
    {
      echo 'Please select an Image';
    }
    else 
    {
       $image_check = getimagesize($_FILES['image']['tmp_name']);
       if($image_check==false)
       {
        echo 'Not a Valid Image';
       }
       else
       {
        $image = file_get_contents ($_FILES['image']['tmp_name']);
        $image_name = $_FILES['image']['name'];
        if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
        {
          echo $current_id;
         //echo 'Successfull';
        }
        else
        {
          echo mysql_error();
        }
       }
   }
        /*-----------------
    IMAGE QUERY END
    ---------------------*/

    <form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
            File        : <input type='file' name= 'image' >
    </form>

Сообщение об ошибке У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с '' в строке 1

4b9b3361

Ответ 1

Во-первых, вы должны проверить, если ваш столбец изображения имеет тип BLOB!

Я ничего не знаю о вашей таблице SQL, но если я попытаюсь сделать свой собственный пример.

Мы получили поля id (int), image (blob) и image_name (varchar (64)).

Таким образом, код должен выглядеть так (предположим, что идентификатор всегда равен "1" и позволяет использовать этот mysql_query):

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
    echo "Something went wrong! :("; 
}

Вы делаете это неправильно во многих отношениях. Не используйте функции mysql - они устарели! Используйте PDO или MySQLi. Вы также должны подумать о сохранении местоположений файлов на диске. Использование MySQL для хранения изображений считается Bad Idea ™. Обработка таблицы SQL с большими данными, например изображениями, может быть проблематичным.

Также ваша форма HTML не соответствует стандартам. Он должен выглядеть следующим образом:

<form action="insert_product.php" method="POST" enctype="multipart/form-data">
    <label>File: </label><input type="file" name="image" />
    <input type="submit" />
</form>

Sidenote:

При работе с файлами и их хранении в виде BLOB данные должны быть экранированы с помощью mysql_real_escape_string(), иначе это приведет к синтаксической ошибке.

Ответ 2

Еще несколько деталей:

  • Добавить поле mysql

`image` blob

  • Получить данные с изображения

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

  • Вставить данные изображения в db

$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";

  • Показать изображение в Интернете

<img src="data:image/png;base64,'.base64_encode($row['image']).'">

  • End

Ответ 3

Как вставить в DB?

<html>
    <head>
        <title>Uploads</title>
    </head>
    <body>
        <input type="file" name="file_array[]"/>
        <input type="file" name="file_array[]"/>
        <input type="file" name="file_array[]"/>
        <input type="submit" name="submit"/>
    </body>
</html>

<?php
    if(isset($_FILES['file_array']))
    {
        $name_array = $_FILES['file_array']['name'];
        $tmp_name_array = $_FILES['file_array']['tmp_name'];
        $type_array = $_FILES['file_array']['type'];
      $size_array = $_FILES['file_array']['size'];
        $error_array = $_FILES['file_array']['error'];
        $dir = "slideshow";

        for($i = 0; $i<count($tmp_name_array); $i++)
        {
            if(move_uploaded_file($tmp_name_array,"slideshow/".$name_array))
            {
                echo $name_array[$i]."Upload is complete<br>";

            }  else {
                echo"Move_uploaded_file function failed for".$name_array[$i]."<br>";
            }
        }
    }
?>