Jak wgrać zdjęcia do bazy danych MySQL za pomocą kodu PHP

Próbuję zapisać obrazy w bazie danych z formularza HTML. Do wykonania tego zadania napisałem kod PHP. Program nie generuje żadnego komunikatu o błędzie, ale także nie wstawia danych obrazu do bazy danych MySQL. Proszę to sprawdzić. Tutaj dzielę się fragmentem mojego kodu.

        /*-------------------
    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>

Komunikat O Błędzie Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla odpowiedniej składni near " na linii 1

Author: NoobEditor, 2013-07-18

3 answers

Najpierw należy sprawdzić, czy kolumna jest typu BLOB !

Nie wiem nic o tabeli SQL, ale jeśli spróbuję zrobić własny jako przykład.

Mamy pola id (int), image (blob) oraz image_name (varchar (64)

Więc kod powinien wyglądać tak (Załóżmy, że ID jest zawsze '1' i użyjmy tego 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! :("; 
}
Robisz to źle na wiele sposobów. Nie używaj funkcji mysql - są one przestarzałe! Użyj PDOlub MySQLi. Należy również pomyśleć o przechowywaniu lokalizacji plików na dysku. Używanie MySQL do przechowywania obrazów jest uważane za Bad Idea™. Obsługa tabeli SQL z dużymi danymi, takimi jak obrazy, może być problematyczna.

Również Twój formularz HTML jest poza standardami. Powinno to wyglądać tak:

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

Sidenote:

Podczas przetwarzania plików i przechowywania ich jako BLOB, dane muszą być przetwarzane za pomocą mysql_real_escape_string(), w przeciwnym razie spowoduje to składnię błąd.

 46
Author: Wiktor Mociun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 12:08:49

Jeszcze tylko kilka szczegółów

  • Dodaj pole mysql

`image` blob

  • Pobierz dane z obrazka

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

  • Wstaw dane obrazu do db

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

  • Pokaż obraz w sieci

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

  • End
 21
Author: Sean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 06:32:31

Jest to idealny kod do przesyłania i wyświetlania obrazu przez bazę danych MySQL.

<html>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image"/>
<input type="submit" name="submit" value="Upload"/>
</form>
<?php
    if(isset($_POST['submit']))
    {
     if(getimagesize($_FILES['image']['tmp_name'])==FALSE)
     {
        echo " error ";
     }
     else
     {
        $image = $_FILES['image']['tmp_name'];
        $image = addslashes(file_get_contents($image));
        saveimage($image);
     }
    }
    function saveimage($image)
    {
        $dbcon=mysqli_connect('localhost','root','','dbname');
        $qry="insert into tablename (name) values ('$image')";
        $result=mysqli_query($dbcon,$qry);
        if($result)
        {
            echo " <br/>Image uploaded.";
            header('location:urlofpage.php');
        }
        else
        {
            echo " error ";
        }
    }
?>
</body>
</html>
 -2
Author: Mayur Gudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-15 09:35:47