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
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.
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
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>
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